我使用ASP.Net MVC。 这里是我的代码片段从控制器命名的课程:
public ActionResult List(int id)
{
var viewmodel.ShowUrl = Url.Action("Show", "Course");
...
}
public ActionResult Show(int id)
{
...
}
viewmodel.ShowUrl拿起任何值是“ID”参数。 所以viewmodel.ShowUrl变为 “/场/显示/ 151”(ID的值是151); 我希望能够设置基于用户交互客户端上的ID部分。 我想viewmodel.ShowUrl的值为“/场/展”。
这似乎是我的错误。 我不会告诉Url.Action包括id值。 它做它自己的。 如果我想设置id的值,那么我会做这样的事情:
var viewmodel.ShowUrl = Url.Action("Show", "Course", new {id = somevalue});
那么,你如何防止MVC从增加的id值? 我可以硬编码到viewmodel.ShowUrl“/场/显示”,但似乎是一个缺憾的解决方案。 谢谢。
我猜你的路由,你不指定ID是一个可选的参数。 下面是一个样本项目的默认路由。
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } //Parameter defaults
);
注意列入id = UrlParameter.Optional
。 不这样做,你会得到你所描述的,因为它认为该ID是强制性的行为。
在一个侧面说明,如果你的显示操作并不总是有一个id,那么它应该可以为空或提供一个默认。
public ActionResult Show(int? id)
public ActionResult Show(int id = 0)
否则,当您尝试加载URL,而不id参数,你会得到一个错误。
对面同样的问题来了,让你知道,你也可以只用一个空字符串:
@Url.Action("Show", "Course", new { id = "" })
我知道这是老了,但我发现这个第一,但不喜欢任何这些解决方案,所以我一直在寻找,发现https://stackoverflow.com/a/19110921/1130636 。
您可以使用UrlParameter.Optional
来解决这个问题
Url.Action("Show", "Course", new { id = UrlParameter.Optional })