我在其中一个视图页面中有一个操作链接
<%=Html.ActionLink("Details", "Details", new { id = Model.Id })%>
并将我重定向到包含此http://localhost:1985/Materials/Details/2
的网址的网页,而不是我希望将我的网址设为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>
<a href="/Materials/Edit/' + this.Id + '">Edit</a></div>';
});
我的路线看起来像这样,
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Materials", action = "Index", id = "" }
);
答案 0 :(得分:2)
我建议你的网址是
http://localhost:1985/Materials/Details/2/Steel
这似乎也是SO显示其网址的方式。
您的路线将被定义为
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
,请在具有子句路径的操作之前添加以下路由。
routes.MapRoute(
"controller with slug",
"Materials/{id}/{slug}",
new {controller = "Materials", action = "Details", id = "", slug = ""}
);
将捕获单词钢的'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将保持不变。