質問

私が開発している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 = ""});

「Tagged Photos」という名前のルートで記述されたビューを表示しているときにのみ問題が発生します。次を介して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ルーティングデバッガー、すべてが順番に表示されます。これには困惑しています。アイデアはありますか?

役に立ちましたか?

解決

異なるビューが異なるURLを生成する理由がわからない。

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

new {sortBy =&quot;&quot; }

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

他のヒント

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

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

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

ルートデバッガーでは、3番目のルートを実行していますか、それとも1番目のルートを実行していますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top