私が開発している ASP.NET MVC (ベータ) サイトでは、ActionLink を呼び出すと、クエリ文字列を含む URL が返されることがあります。この動作が発生する状況を特定しましたが、クリーンな URL を生成する代わりに、クエリ文字列パラメーターを使用することを決定する理由はまだわかりません。機能的には同じであることはわかっていますが、URL の一貫性 (および外観) のために、これは私が望むものではありません。
ここに私のルートがあります:
routes.MapRoute(
"Photo Gallery Shortcut",
"group/{groupname}",
new { controller = "Photos", action = "All", Id = "" });
routes.MapRoute(
"Tagged Photos", //since the Tagged action takes an extra parameter, put it first
"group/{groupname}/Photos/Tagged/{tagname}/{sortby}",
new { controller = "Photos", action = "Tagged", Id = "", SortBy = "" });
routes.MapRoute(
"Photo Gallery", //since the Gallery's defualt action is "All" not "Index" its listed seperatly
"group/{groupname}/Photos/{action}/{sortby}",
new { controller = "Photos", action = "All", Id = "", SortBy = "" });
routes.MapRoute(
"Group", //<-- "Group" Category defined above
"group/{groupname}/{controller}/{action}/{id}",
new {controller = "Photos", action = "Index", Id = ""});
この問題は、「タグ付き写真」という名前のルートで記述されたビューを見ているときにのみ発生し、次の方法で ActionLink を実行します。
Html.ActionLink<PhotosController>(p => p.All((string)ViewData["group"], ""), "Home")
次の URL が生成されます。
http://domain/group/GROUPNAME?sortBy=
他のビューから生成される URL は次のとおりです。
http://domain/group/GROUPNAME
Phil のASP.NET Routing Debuggerをプルダウンすると、すべてが順番に表示されます。これは私を困惑させました。何か案は?