私はこの1か月ほどで大規模なMVCアプリケーションに取り組んできましたが、カスタムルートハンドラーを定義する必要があったのはこれが初めてであり、いくつかの問題が発生しています。基本的に、渡すパラメータは2つあります。最初のものは必須で、2番目のものはオプションです。
私はこの答えに従っています ここ 。
これが私のカスタムルートです:
routes.MapRoute(
"MyRoute",
"{controller}/{action}/{param1}/{param2}",
new {
controller = "MyController",
action = "MyAction",
param1 = "",
param2 = "" // I have also tried "UrlParameter.Optional" here.
}
);
そして私のアクションメソッドのシグネチャ:
public ActionResult MyAction(string param1, string param2)
URLを試してみるとhttp://[myserver]/MyController/MyAction/Test1/Test2
すると、param1 = "Test1"およびparam2 = "Test2"で、期待どおりに機能します。
URLを試してみるとhttp://[myserver]/MyController/MyAction/Test1
その場合、両方のパラメーターはnullです。
私が迷子になっているので、誰かが私がここで間違っていることを教えてくれることを願っています。
あなたが新しいルートを作成し、あなたのルートと非常によく似たデフォルトのルートを残したと思います。最初に一致するルートを見つけるために、ルートのコレクションがトラバースされることに注意してください。したがって、デフォルトのものを残した場合:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
ルートの上では、リクエストをhttp://[myserver]/My/MyAction/Test1
に一致させ、MyController.MyAction
を呼び出し、「Text1」をid
という名前のパラメータに設定します。このアクションはid
という名前のアクションを宣言していないため、これは失敗します。
あなたがする必要があるのは、ルートリストの最初のようにルートを移動し、それをより具体的にすることです。
routes.MapRoute(
"Route",
"My/{action}/{param1}/{param2}",
new
{
controller = "My",
action = "MyAction",
param1 = "",
param2 = ""
});
これにより、My
を介してルーティングされたすべてのトラフィックがこのルートに一致するようになります。
これを試して
routes.MapRoute("MyRoute",
"myRoute/{param1 }/{param2 }",
new { controller = "MyController", action = "MyAction", param2 = UrlParameter.Optional },
new { param2 = @"\w+" });
"rlParameter.Optional"を使用して1つのパラメーターをオプションとして指定でき、DataTypeで2番目のパラメーターを指定すると、整数値を渡すとDataType(@ "\ d +")になり、文字列については上記で説明します。
注:パラメータのシーケンスは非常に重要ですオプションのパラメータは最後に渡す必要がありますおよびGloab.asaxのデフォルトルートの前に新しいルートを登録します。
次に、次のようなアクションリンク
<a href="@Url.RouteUrl("MyRoute", new { param2 = "Test1",param1 = "Test2"})">Test</a>
または1つのパラメータ
<a href="@Url.RouteUrl("MyRoute", new { param2 = "Test1"})">Test</a>
あなたのコントローラーで
public ActionResult MyAction(string param2,string param1)
{
return View()
}
こんにちはあなたはこのようなあなたのルートを作成します私はこれがあなたを助けると思います
routes.MapRoute(
"Regis", // Route nameRegister
"Artical/{id}", // URL with parameters
new { controller = "Artical", action = "Show", id = UrlParameter.Optional } // Parameter defaults
);