9

私が開発している 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をプルダウンすると、すべてが順番に表示されます。これは私を困惑させました。何か案は?

4

3 に答える 3

3

異なるビューが異なる URL を生成する理由がわかりません。

ただし、最初のルートにデフォルト値を割り当てることで、その sortBy パラメータを取り除くことができます。

新しい { sortBy = "" }

生成中に、sortBy がデフォルトと一致する場合、ルート エンジンはそのパラメーターをスキップします (クエリ文字列にある場合)。

于 2008-10-22T06:58:48.757 に答える
2

ASP.NETでのルーティングの動作方法のため、ここではアクションルートではなく、名前付きルートを使用する必要があります。これは、「ベストマッチ」ではなく「ファーストマッチ」を実行するためです。

于 2008-10-22T14:07:26.893 に答える
0

最初のルートをピックアップしていると思います。これにもアクション All があります。また、sortby が指定されていないため、クエリ文字列パラメーターとして公開されています。

これは、クエリ文字列値で sortby パラメーターを埋めるだけなので、PhotosController のアクション メソッド 'All' で引き続き機能します。

Route Debugger では、3 番目のルートまたは 1 番目のルートを実行していますか?

于 2008-10-22T04:54:06.480 に答える