4

私は 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 = "" });

最初のルートのアクションリンクを呼び出すと、そうすべきだと思うように作成されます:

.../Movies/Category/SubCategory

ただし、2番目のリンクを作成すると、次のように入力されます:

.../Movie?movieId=ff569575-08ec-4049-93e2-901e7b0cb96a

以前はGUIDの代わりに文字列を使用していましたが、それでも同じことをしていました

.../Movie?movieName=Snatch

私のアクションリンクは次のように設定されています

<%= Html.ActionLink(parent.Name, "Index", "Catalog",
    new { category = parent.Name, subCategory = "" }, null)%>

<%= Html.ActionLink(movie.Name, "Index", "Movie", 
    new { movieId = movie.MovieId }, null)%>

私のアプリはまだ動作しますが、この動作は奇妙だと思いました。どんな助けでも素晴らしいでしょう。

ありがとう!

4

2 に答える 2

5
routes.MapRoute("Movie", "Movie/{movieId}", 
    new { controller = "Movie", action = "Index", movie = "" });

ルート テキストは、mvc リンクに送信するプロパティの名前と一致しませんか?

于 2009-02-23T21:24:29.617 に答える
4

問題は、ActionLink を呼び出すときに、ルーティング システムが 2 つのルートのどちらを使用するか判断できないため、最初のルートを選択することです。解決策は、ActionLink の代わりに RouteLink を使用することです。RouteLink を使用すると、URI の生成時に使用するルートの名前を指定できます。その場合、どのルートを使用するかについてあいまいさはありません。ActionLinkは時代遅れだと思います。RouteLink の代わりにこれを使用する理由は思いつきません。

ただし、ユーザーがリンクを送信するときに問題が発生する場合があります。その場合は、ルート制約を使用して、正しいルートの選択を強制します。

ActionLink/RouteLink で使用するトークンとルート自体が一致する必要があるという Andrew の意見 (賛成票) は正しいです。

于 2009-02-23T21:23:21.460 に答える