Asp.net mvc Mvc:从url中排除id
我的cshtml页面中有下一个foreach,它允许我迭代每个模型项Asp.net mvc Mvc:从url中排除id,asp.net-mvc,asp.net-mvc-3,routes,global-asax,Asp.net Mvc,Asp.net Mvc 3,Routes,Global Asax,我的cshtml页面中有下一个foreach,它允许我迭代每个模型项 @foreach (var item in Model) { <div class="date"> @item.pubDate </div> <a href="@Url.RouteUrl("Details", new { action = "Details", controller = "News", id = item.id, title = item.t
@foreach (var item in Model)
{
<div class="date">
@item.pubDate
</div>
<a href="@Url.RouteUrl("Details", new { action = "Details", controller = "News", id = item.id, title = item.title })">
<img src="some route" alt="some alt" />
</a>
}
可以使用以下内容创建URL
http://something.com/News/Details/1/first-title
http://something.com/News/Details/2/second-title
http://something.com/News/Details/first-title
http://something.com/News/Details/second-title
但我仍然可以向控制器发送id参数
提前感谢您只需传递
id
参数的title
属性即可
@Url.RouteUrl("Details",
new { action = "Details", controller = "News", id = item.title})
然后在操作方法中将id
参数的类型设置为字符串:
public ActionResult Details(string id)
或者,您可以创建自定义路由,如von-v的答案中所示。只需确保它位于默认路线之上。添加另一条路线:
routes.MapRoute(
name: "NewsTitleRoute",
url: "News/Details/{id}/{title}",
defaults: new {
controller = "News",
action = "Details",
id = UrlParameter.Optional,
title = UrlParameter.Optional
}
);
在控制器中,像这样声明details方法,并将两个参数作为可选参数:
public ActionResult Details(int? id, string title="")
{
}
该路线配置和详细信息
方法适用于:
id
呢?好的,您是对的,我认为可以通过某种“隐藏”方式发送id,只在url中显示标题,这不一定可能实现我的目的:(好吧,假设你把id
放在一个隐藏的字段上,然后做一个GET
请求提交表单,该id仍然会附加在URL上。我没有尝试过从查询字符串中隐藏参数,我相信这是不可能的。除非有什么神奇的方法可以做到。随时欢迎帮助你。)