0

/Product/22/Product-Name のようHtml.ActionLinkhref を含むアンカー タグを返すために使用したいと考えています。Productはコントローラ名、22は ID、Product-Nameはタイトルです。

私のglobal.asaxでは、次のルートを設定しました:

routes.MapRoute(
  "ProductRoute", // Route name
  "Product/{id}/{title}", // URL with parameters
  new { controller = "Product", action = "Index", id = UrlParameter.Optional });

次のコードを使用してみました

@Html.ActionLink(model.Name, null, "Product", 
             new { id = model.Id, title = model.Name.Replace(" ","-") }, null)

しかし、それはProduct/Browse/22?title=Product-Nameをもたらします。このコードは、CatalogコントローラーのBrowseアクションによって返されたBrowseビューにあり、そのため、間にあるBrowseを取得します。

不思議なことに、 Home ControllerのIndexアクションによって返されるIndex View でも同じコードが正常に機能します。この違いの理由は何ですか?. 何か足りないのでしょうか、それとも Asp.net MVC3 のバグですか?

指定した URL 形式を実現するにはどうすればよいですか。当面の間、私はこのコードを使用しています

<a href="/Product/@product.Id/@product.Name.Replace(" ","-")">@product.Name</a>
4

1 に答える 1

3

デフォルトルートの前にカスタムルートを定義していることを確認して、試してください

@Html.ActionLink(model.Name,
                  "Index",
                 new {controller="Product", id = model.Id, title = model.Name.Replace(" ","-") }, null)

最初のパラメータはDisplayName、2番目はActionResultの名前、次にRouteValuesです。

于 2012-01-07T19:27:59.233 に答える