@Url.Action を非標準のルート構造を持つエリアで機能させるのに問題があります。
たとえば、このルートをダッシュボード エリアに登録すると、次のようになります。
context.MapRoute(
"Dashboard_default",
"Dashboard/{controller}/{action}/{id}",
new { controller = "View", action = "Display", id = UrlParameter.Optional }
);
そして、レイアウト ビューで次のように呼び出します。
@Url.Action("Select", "View", new { area = "Dashboard" })
適切な URL を取得します: /Dashboard/View/Select
ただし、ルートを変更して、次のようなオプションのセカンダリ ID を含めると:
context.MapRoute(
"Dashboard_default",
"Dashboard/{controller}/{action}/{id}/{secondaryid}",
new { controller = "View", action = "Display", id = UrlParameter.Optional, secondaryid = UrlParameter.Optional }
);
次に、 @Url.Action(...) への同じ呼び出しは、URL を返しません。これらのオプションのパラメーターを実際の値で指定すると、次のようになります。
@Url.Action("Select", "View", new { area = "Dashboard", id = 1, secondaryid = 2 })
私は神の戻り値を取得します: /Dashboard/View/Select/1/2
問題は、この領域での私のアクションの一部が ID またはセカンダリ ID を必要とせず、それらなしで URL を生成したいことです。それらを (int?)null に設定しても、まだ機能しません。
私は何か間違ったことをしていますか?routeValues パラメータでそれらを指定しない場合、Url.Action(...) は id および secondaryid トークンなしで URL を返すべきではありませんか?