Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc Mvc:从url中排除id_Asp.net Mvc_Asp.net Mvc 3_Routes_Global Asax - Fatal编程技术网

Asp.net mvc Mvc:从url中排除id

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

我的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.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和参数,则需要传递它。否则,如果您的站点没有收到id,它怎么知道要使用什么
id
呢?好的,您是对的,我认为可以通过某种“隐藏”方式发送id,只在url中显示标题,这不一定可能实现我的目的:(好吧,假设你把
id
放在一个隐藏的字段上,然后做一个
GET
请求提交表单,该id仍然会附加在URL上。我没有尝试过从查询字符串中隐藏参数,我相信这是不可能的。除非有什么神奇的方法可以做到。随时欢迎帮助你。)