3

これまで、ASP.NETMVCに付属しているデフォルトのルーティングを使用することはできませんでした。残念ながら、私はより複雑なルートに分岐しているので、これを機能させる方法に頭を悩ませています。

私が取得しようとしている簡単な例は、パス/ User / {UserID}/ItemsをユーザーコントローラーのItems関数にマップすることです。ここでのルーティングで何が間違っているのか誰かに教えてもらえますか?

routes.MapRoute("UserItems", "User/{UserID}/Items", 
                      new {controller = "User", action = "Items"});

そして私のaspxページで

Html.ActionLink("Items", "UserItems", new { UserID = 1 })
4

4 に答える 4

4

目の前にある MVC Preview 4 コードを見ると、使用している Html.ActionLink() のオーバーロードは次のとおりです。

public string ActionLink(string linkText, string actionName, object values);

2 番目のパラメーターがrouteName ではなくactionNameであることに注意してください。

そのため、試してください:

Html.ActionLink("Items", "Items", new { UserID = 1 })

または、次を試してください。

<a href="<%=Url.RouteUrl("UserItems", new { UserId = 1 })%>">Items</a>
于 2008-09-23T04:00:25.163 に答える
1

もっと情報を投稿できますか?リンクで生成されるaspxページはどのURLですか?ルート定義の順序が原因である可能性があります。デフォルトルートの前にルートを宣言する必要があると思います。

于 2008-09-23T03:47:25.787 に答える
0

まず、それが生成する URL を確認し、Phil Haackのルート デバッグ ライブラリで確認することから始めます。いろいろクリアになります。

多数のルートがある場合は、ルートに名前を付け、名前付きルーティングを使用することを検討してください。コードに再度アクセスしたときに意図がより明確になり、解析速度が向上する可能性があります。

さらに(これは純粋に個人的な意見です)、ページの最初のどこかにリンクを文字列で生成し、それらの文字列を HTML に配置するのが好きです。これは小さなオーバーヘッドですが、私の意見では、コードがはるかに読みやすくなります。さらに、リンクがある場合、または繰り返しリンクしている場合は、それらを 1 回だけ生成する必要があります。

私は置くことを好む

<% string action = Url.RouteUrl("NamedRoute", new 
    { controller="User",
      action="Items",
      UserID=1});%>

そして後で書く

<a href="<%=action%>">link</a>
于 2009-04-03T07:22:25.037 に答える
0
Html.ActionLink("Items", "User", new { UserID = 1 })
于 2011-01-30T01:53:48.963 に答える