2

我的一个视图页面中有一个操作链接

<%=Html.ActionLink("Details", "Details", new { id = Model.Id })%>并将我重定向到具有这样http://localhost:1985/Materials/Details/2而不是这样的 url 的页面我想将我的 url 作为http://localhost:1985/Materials/Details/steel材料名称而不是 Id ...这可能吗......这是我的控制器操作方法,

    public ActionResult Details(int id)
    {
        var material = consRepository.GetMaterial(id);
        return View("Details", material);
    }

编辑: 我正在迭代从 jsonresult 控制器返回的 json 对象....

$.each(data.Results, function() {
            divs += '<a href="/Materials/Details/' + this.Id + '">Details</a>
            &nbsp;<a href="/Materials/Edit/' + this.Id + '">Edit</a></div>';
            });

我的路线是这样的,

routes.MapRoute(
                "Default",                                           
                "{controller}/{action}/{id}",                         
                new { controller = "Materials", action = "Index", id = "" } 
            );
4

1 回答 1

2

我建议您的网址是

http://localhost:1985/Materials/Details/2/Steel

这似乎也是 SO 显示其 URL 的方式。

您的路线将被定义为

routes.MapRoute(
  "action with slug", 
  "{controller}/{action}/{id}/{slug}",
  new {controller = "Error", action = "NotFound", id = "", slug = ""}
);

routes.MapRoute(
  "Default",                                           
  "{controller}/{action}/{id}",                         
  new { controller = "Materials", action = "Index", id = "" } 
);

回答评论中的第二个问题,“你如何从链接中删除详细信息?” 如果要删除 ACTION 名称,因此 URL 只是http://site/controler/id/slug,请在带有 slug 路由的操作之前添加以下路由。

routes.MapRoute(
  "controller with slug", 
  "Materials/{id}/{slug}",
  new {controller = "Materials", action = "Details", id = "", slug = ""}
);

将捕获单词 steel 的“slug”将被操作忽略,因为无论如何您只希望 Id 检索材料。

创建路由链接而不是操作链接,如下所示

<%= Html.RouteLink(material.Name,
      "show with slug", 
      new { controller = "Materials", 
            action = "Details", 
            id = material.Id, 
            slug = Server.HtmlDecode(material.Name).Replace(" ","-")
      }) 
%>

我用连字符替换了“slug”中的空格,这样浏览器就不会用 %20 替换它们。

您的详细信息 ActionResult 将保持不变。

于 2010-05-06T04:13:51.270 回答