【问题标题】:Html.ActionLink equivalent of a specific URL formatHtml.ActionLink 等效于特定 URL 格式
【发布时间】:2012-01-07 18:54:03
【问题描述】:

我想使用Html.ActionLink 来返回一个带有 href 的锚标记,例如 /Product/22/Product-Name,其中 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 控制器的 Index 操作返回的 Index 视图中运行良好。造成这种差异的原因是什么? .我是否遗漏了什么,或者这是 Asp.net MVC3 中的一个错误。

我应该怎么做才能实现我声明的 URL 格式。同时,我正在使用此代码

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

【问题讨论】:

  • 您也不能在路由定义中将可选参数放在必需参数之前。所以你可以从路由定义中删除 id = UrlParameter.Optional。
  • 路线很好......没有任何问题......我只是无法正确获取 Html.ActionLink
  • 您是否尝试过使用 Html.RouteLink 代替?
  • 我对此不太了解,但我在几秒钟前尝试了@3nigma 代码,它成功了:-)

标签: asp.net-mvc-3 razor asp.net-routing html.actionlink


【解决方案1】:

确保您在默认路由之前定义了自定义路由并尝试

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

第一个参数是 DisplayName,第二个参数是 ActionResult 的名称,然后是 RouteValues

【讨论】:

  • 谢谢!!有用。您已经给出了 ActionName,但它仍然没有出现,为什么会这样。另外,为什么我的 HTML.ActionLink 代码在主页的索引视图中运行良好
  • actionname 不显示,因为它不是您的路线的一部分,路线包含控制器/ID/标题,只要它在索引页面上对您有用,我不能说可能是什么原因……
  • hmm....谢谢队友....我想这可能是 MVC3 中的错误,否则为什么相同的代码会显示不同的结果.... :-) ...
猜你喜欢
  • 2021-03-15
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多