Asp.net mvc 3 构造URL时,操作包含id
我正在使用ASP.NETMVC。以下是来自名为Course的控制器的代码片段:Asp.net mvc 3 构造URL时,操作包含id,asp.net-mvc-3,asp.net-mvc-routing,url.action,Asp.net Mvc 3,Asp.net Mvc Routing,Url.action,我正在使用ASP.NETMVC。以下是来自名为Course的控制器的代码片段: public ActionResult List(int id) { var viewmodel.ShowUrl = Url.Action("Show", "Course"); ... } public ActionResult Show(int id) { ... } viewmodel.ShowUrl将拾取“id”参数的任何值。因此viewmodel.ShowUrl变为“/Course
public ActionResult List(int id)
{
var viewmodel.ShowUrl = Url.Action("Show", "Course");
...
}
public ActionResult Show(int id)
{
...
}
viewmodel.ShowUrl将拾取“id”参数的任何值。因此viewmodel.ShowUrl变为“/Course/Show/151”(id的值为151);我希望能够基于用户交互在客户端上设置id部分。我希望viewmodel.ShowUrl的值为“/Course/Show”
这对我来说似乎是一个错误。我不会告诉Url.Action包含id值。这是它自己做的。如果我想设置id值,我会这样做:
var viewmodel.ShowUrl = Url.Action("Show", "Course", new {id = somevalue});
那么,如何防止MVC添加id值呢?我可以将viewmodel.ShowUrl硬编码为“/Course/Show”,但这似乎是一个笨拙的解决方案。谢谢。我猜在您的路由中,您没有指定id是可选参数。下面是示例项目中的默认路线
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } //Parameter defaults
);
请注意包含了id=urlparmeter.Optional
。否则,您将得到您描述的行为,因为它认为id是必需的
另一方面,如果您的Show操作并不总是有id,那么它应该可以为null或提供默认值
public ActionResult Show(int? id)
public ActionResult Show(int id = 0)
否则,当您尝试在没有id参数的情况下加载url时,将出现错误。刚刚遇到同样的问题,因此您知道,您也可以使用空字符串:
@Url.Action("Show", "Course", new { id = "" })
我知道这很古老,但我首先发现了它,但我不喜欢这些解决方案,所以我一直在寻找并找到了 您可以使用
urlparmeter.Optional
来解决此问题
Url.Action(“Show”,“Course”,new{id=UrlParameter.Optional})
我记不清了,但是Routedata
在ViewData
上,这就是它被传递的原因。我想你可以做Url.Action(“Show”,“Course”,new{})
或清空ViewData
对象上的RouteData
。谢谢@Ben。这是唯一一个对我有用的。