誰かが理由を理解し、場合によっては間違ったリンクを作成するの@Html.ActionLink
を 手伝ってくれるかもしれません。@Html.RouteLink
私はそのように宣言されたルートを持っています:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Catalog", // Route name
"Catalog/{a}/{b}/{c}/{d}/{e}", // URL with parameters
new { controller = "Catalog", action = "Index", a = UrlParameter.Optional, b = UrlParameter.Optional, c = UrlParameter.Optional, d = UrlParameter.Optional, e = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
私は自分のパラメータを持つコントローラを持っています:
public ActionResult Index(string a, string b, string c, string d, string e)
{
//Do stuff;
}
そのように宣言されたビュー@Html.RouteLink
のケースのリストがあります:@Html.ActionLink
@Html.ActionLink("ActionLink1","Index", new { a = "a" }, null)
@Html.ActionLink("ActionLink2","Index", new { a = "a", b = "b" }, null)
@Html.ActionLink("ActionLink3","Index", new { a = "a", b = "b", c = "c" }, null)
@Html.ActionLink("ActionLink4","Index", new { a = "a", b = "b", c = "c", d = "d" }, null)
@Html.ActionLink("ActionLink5","Index", new { a = "a", b = "b", c = "c", d = "d", e = "e" }, null)
<br/>
@Html.RouteLink("RouteLink1","Catalog", new { a = "a" })
@Html.RouteLink("RouteLink2","Catalog", new { a = "a", b = "b" })
@Html.RouteLink("RouteLink3","Catalog", new { a = "a", b = "b", c = "c" })
@Html.RouteLink("RouteLink4","Catalog", new { a = "a", b = "b", c = "c", d = "d" })
@Html.RouteLink("RouteLink5","Catalog", new { a = "a", b = "b", c = "c", d = "d", e = "e"
})
結果
現在の URL http://localhost:2288/Catalog
ActionLink1
- 実結果:
http://localhost:2288/Catalog?a=a
- 期待される結果:
http://localhost:2288/Catalog/a
RouteLink1
- 実結果:
http://localhost:2288/Catalog
- 予想された結果:
http://localhost:2288/Catalog/a
現在の URL http://localhost:2288/Catalog/a
ActionLink1
- 実結果:
http://localhost:2288/Catalog?a=a
- 予想された結果:
http://localhost:2288/Catalog/a
現在の URL http://localhost:2288/Catalog/a/b
ActionLink1
- 実結果:
http://localhost:2288/Catalog/a/b
- 予想された結果:
http://localhost:2288/Catalog/a
RouteLink1
- 実結果:
http://localhost:2288/Catalog/a/b
- 予想された結果:
http://localhost:2288/Catalog/a
現在の URL http://localhost:2288/Catalog/a/b/c
ActionLink1
- 実結果:
http://localhost:2288/Catalog/a/b/c
- 予想された結果:
http://localhost:2288/Catalog/a
RouteLink1
- 実結果:
http://localhost:2288/Catalog/a/b/c
- 予想された結果:
http://localhost:2288/Catalog/a
ActionLink2
- 実績:
http://localhost:2288/Catalog/a/b/c
- 予想された結果:
http://localhost:2288/Catalog/a/b
RouteLink2
- 実績:
http://localhost:2288/Catalog/a/b/c
- 予想された結果:
http://localhost:2288/Catalog/a/b
等々...
現在の URL http://localhost:2288/Catalog/a/b/c/d
ActionLink1、ActionLink2、ActionLink3、および RouteLink1、RouteLink2、RouteLink3 はすべて間違った URL を生成しています。
現在の URL http://localhost:2288/Catalog/a/b/c/d/e
すべてのActionLinks と RouteLinks (ActionLink5 と RouteLinks5 を除く) が間違った URL を生成しています。
ここにサンプル プロジェクトを置きます: http://www.mediafire.com/?gdbatoafgd0kf4w
誰かがなぜそれが起こっているのか理解できるでしょうか?
その話は、数日前に でブレッドクラムを作成しようとしていたときに始まり、MvcSiteMapProvider
によって作成された同じリンクを取得しましたMvcSiteMapProvider Breadcrumbs
。私の調査中にMvcSiteMapProvider
、問題を別の場所で引き起こしていないことがわかりました。だから私はデフォルトのMVC4プロジェクトを作成しましたが、デフォルトではそのような奇妙な動作をしています。
アップデート
現在のURLに基づいて生成されたヘルパーURLを使用しているときのように見えます..しかし、私が得ているときの理由をまだ理解でき@Html.ActionLink
ません:@Html.RouteLink
Current url
http://localhost:2288/Catalog
http://localhost:2288/Catalog?a=a
http://localhost:2288/Catalog/a
の場合の代わりにActionLink
の場合のhttp://localhost:2288/Catalog
代わりにhttp://localhost:2288/Catalog/a
RouteLink