MVC ActionLinkのリンクの種類を生成する...なぜ?
-
06-09-2019 - |
質問
私は、MVCの土地に新たなんだ、と私は働いているアプリを持っています。私は私の世界では2つのルートを持つ2つの異なるリンクを持っているかなり似
ルート1
routes.MapRoute("Category", "Movies/{category}/{subcategory}",
new { controller = "Catalog", action = "Index", category = "", subcategory = "" });
ルート2
routes.MapRoute("Movie", "Movie/{movie}",
new { controller = "Movie", action = "Index", movie = "" });
ときに私はそれが必要だと思うだろうとして、それはそれを作成する最初のルートのActionLinkのを呼び出します:
.../Movies/Category/SubCategory
私は私の2番目のリンクを作成するときしかし、それはこのようにそれを移入します:
.../Movie?movieId=ff569575-08ec-4049-93e2-901e7b0cb96a
私は前に代わり、GUIDの文字列を使用していたし、それはまだ同じすなわちをしていた。
.../Movie?movieName=Snatch
次のように私のactionlinksが設定されている。
<%= Html.ActionLink(parent.Name, "Index", "Catalog",
new { category = parent.Name, subCategory = "" }, null)%>
<%= Html.ActionLink(movie.Name, "Index", "Movie",
new { movieId = movie.MovieId }, null)%>
私のアプリはまだ動作しますが、私はこの行動が奇妙だと思いました。すべてのヘルプは素晴らしいことだ。
ありがとうございます。
解決
routes.MapRoute("Movie", "Movie/{movieId}",
new { controller = "Movie", action = "Index", movie = "" });
ルートテキストはあなたがMVCリンクに提出されているプロパティの名前と一致していないでしょうか?
他のヒント
問題は、あなたがActionLinkのを呼び出すときに、ルーティングシステムを使用するために、2つのルートのどちらを見つけ出すことはできませんということですので、最初に選択されます。解決策はRouteLink代わりのActionLinkのを使用することです。 RouteLinkは、URIを生成するときに使用するルートの名前を指定できます。そして、どのルートを使用するように曖昧さはありません。私はActionLinkのは時代遅れだと思います。私はRouteLinkのの代わりにそれを使用する理由はないと考えることができます。
ユーザーがリンクを送信したときにしかし、あなたはまだ問題がある可能性があります。その場合に、正しいルートの選択を強制するために、ルートの制約を使用します。
アンドリューはあなたがActionLinkの/ RouteLinkに使用トークンやルート自体が一致しなければならないこと(投票アップ)が正しいです。