0

これが可能かどうか知りたいです(そうあるべきだと思われます)

次のようなルートが必要です。

/events/{id}/addcomment

ここで、{id} は、コメントを追加するイベントを識別するために使用されるパラメーターです。/events/addcomment/{id} を簡単に実行できることは承知していますが、これはこのアクションをルーティングしたい方法ではないため、他の SO 投稿を見てこれまでに得たものです

global.asax ファイルにルートを登録します -

        routes.MapRoute(
            "AddComment",
            "Events/{id}/AddComment",
            new { controller = "Events", action = "AddComment", id = "" }
        );

次に、イベントコントローラー内の私のアクション-

[ActionName("{id}/AddComment")]
public ActionResult AddComment(int id)
{
    Event _event = db.Events.Find(id);
    var auth = OAContext.LoginRedirect("Must be logged in to add a comment");
    if (auth != null)
        return auth;
    else if (_event == null)
        return HttpNotFound();
    else
        return View(_event);
}

私はこれを ActionName アノテーションの有無にかかわらず試しましたが、ここで何が間違っているのか完全にはわかりません。

後で、/events/{eventId}/comment/{commentId}/{action} などのルートを作成して、ユーザーがイベントからコメントを編集/削除できるようにする予定ですが、最初にこれをルーティングする方法を正確に把握する必要があります.

私がこれを尋ねている理由は、URL でアクションを実行するパラメーターの他のサンプルを見たことがないためです。おそらく私はこれを行うことができません。

私の質問:この URL 形式は可能ですか? もしそうなら、これをルートとコントローラーにコーディングする適切な方法は何ですか?

4

1 に答える 1

1

これはうまくいくはずのルートです:

routes.MapRoute(
   "AddComment",
   "Events/{id}/AddComment",
   new { controller = "Events", action = "AddComment" }
);

これが機能するために、アクションで ActionName 属性を使用する必要はありません。デフォルトルートの前にこのルートを定義したことを確認してください。また、{id}ルート パラメータはルート定義の最後の部分ではないため、オプションにすることはできません。ルートを生成するときは、常にその値を指定する必要があります。

例えば:

@Html.ActionLink(
    "click me", 
    "AddComment", 
    "Events",
    new { id = "123" },
    null
)
于 2013-02-15T21:06:59.060 に答える