Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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 3 构造URL时,操作包含id_Asp.net Mvc 3_Asp.net Mvc Routing_Url.action - Fatal编程技术网

Asp.net mvc 3 构造URL时,操作包含id

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

我正在使用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/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。这是唯一一个对我有用的。