私は ASP.Net MVC4 アプリケーションを持っています。ここでは、T4MVC を使用して、ビュー内でアンカー要素を便利に生成しています。このようなもの:
@Html.ActionLink("Application 1", MVC.Application.Overview(1))
RouteConfig に 2 つのルートがあります。
routes.MapRouteLowercase(
name: "DefaultWithId",
url: "{controller}/{id}/{action}/{subaction}",
constraints: new { id = @"\d+" },
defaults: new { subaction = UrlParameter.Optional }
);
routes.MapRouteLowercase(
name: "Default",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
一部のアクションでは特定のアプリケーションへの ID が必要ですが、他のアクションはアプリケーション固有ではないため (すべてのアプリケーションを表示するページなど)、ID は必要ありません。
ルートはほとんどの場合うまく機能し、次のようなリンクを生成します。
/application/index <-- Overview of all applications
/application/1/overview <-- Overview of specific application
/application/1/overview
私がオンになっていて、インデックスアクションに戻るアンカー要素を作成しようとすると、問題が発生します。生成されたリンクは最終的に になります/application/1/index
が、これは望ましい動作ではありません。
間違っている場合は訂正してください。ただし、ここで起こっていることは、T4MVC が現在のページのルートで使用可能なアプリケーション ID があることを認識し、その ID を使用してDefaultWithId
、代わりにルートを使用できるようにすることです。 of Default
、index-action への URL を生成します。
もちろん、次のような適切なアンカーを強制することもできます。
@Html.RouteLink(
"All applications",
"Default",
new { controller = "Application", action = "Index"})
しかし、それは実際の問題ではなく、症状を治しているように感じます. また、すべてのアンカーのコンパイル時チェックの美しさを失うので、別のことをしたいと思います。
ビューでアンカーを生成するときに、T4MVC に現在のページのパラメーターを強制的に無視させる方法はありますか? または、この動作を回避するために何らかの方法でルートを変更できますか?