6

ASP.NETMVCルーティングに関する質問があります。まず、私のエリアの設定について説明します。とても簡単です。

Areas
|
+--Foo
   |
   +--Controllers
      |
      +--BarController.cs

私のエリアには「Foo」というフォルダと「BarController.cs」というコントローラがあります。Barコントローラには「DoStuff1()」、「DoStuff2()」などの名前のメソッドがいくつかあります。

私のウェブサイトは次のURLを使用しています。

/foo/bar/15
/foo/bar/dostuff1
/foo/bar/dostuff2

最初のURLにはIDが必要であり、BarコントローラーのデフォルトのIndex()メソッドを使用して、Webページにビューとモデルを入力します。

2番目と3番目のURLでは、jQueryajax呼び出しにそれらを使用しています。

これが私の地域登録からのコードです

context.MapRoute(null, "Foo/Bar/DoStuff1", new
{
    action = "DoStuff1",
    controller = "Bar"
});

context.MapRoute(null, "Foo/Bar/DoStuff2", new
{
    action = "DoStuff2",
    controller = "Bar"
});

context.MapRoute(null, "Foo/Bar/{id}", new
{
    action = "Index",
    controller = "Bar"
});

私の問題は、作成する新しいコントローラーメソッドごとに、エリア登録ファイルに別のルートマッピングを追加する必要があることです。たとえば、メソッドDoStuff3()を追加する場合、これをエリア登録に追加する必要があります。

context.MapRoute(null, "Foo/Bar/DoStuff3", new
{
    action = "DoStuff3",
    controller = "Bar"
});

新しいコントローラメソッドのエリア登録ファイルに新たに追加する必要のない、上記のURLを処理するための汎用ルートマッピングを作成するにはどうすればよいですか?

4

2 に答える 2

3

コントローラーのアクションを引き出すことができます。

次のように URL を記述します。

"Foo/Bar/{action}"

さらに、コントローラーも引き出して、

"Foo/{controller}/{action}"

この場合、action = "Index"アクション パラメーターが指定されていない場合、デフォルト値の "Index" が提供されます。

この場合、 と の間を明確にする必要が"Foo/Bar/{action}"あり"Foo/Bar/{id}"ます。マッチングは順番に行われるため、idルートを最初に置き、パラメーターに数値制約を追加しidます。これにより、有効な数値 ID が一致し、アクション名が次のルートにスキップできるようになります。2 つのルートは次のようになります。

context.MapRoute(null, "Foo/Bar/{id}", new
{
    action = "Index",
    controller = "Bar"
},
new { id = @"\d+" });

context.MapRoute(null, "Foo/Bar/{action}", new
{
    action = "Index", //optional default parameter, makes the route fall back to Index if no action is provided
    controller = "Bar"
});
于 2013-02-14T18:46:00.433 に答える
0

MVCテンプレートに付属するデフォルトのルーティングは、必要なルート構成のほとんどに適しています。

routes.MapRoute(
                  name: "Default",
                  url: "{controller}/{action}/{id}",
                  defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
于 2013-02-14T18:46:15.390 に答える