Tom*_*eck 23 asp.net-mvc-routing url.action asp.net-mvc-3
我正在使用ASP.Net MVC.这是来自名为Course的控制器的代码片段:
public ActionResult List(int id)
{
var viewmodel.ShowUrl = Url.Action("Show", "Course");
...
}
public ActionResult Show(int id)
{
...
}
Run Code Online (Sandbox Code Playgroud)
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});
Run Code Online (Sandbox Code Playgroud)
那么,你如何阻止MVC添加id值?我可以将viewmodel.ShowUrl硬编码为"/ Course/Show",但这似乎是一个kludgy解决方案.谢谢.
Ben*_*ull 27
刚遇到同样的问题,所以你知道,你也可以使用一个空字符串:
@Url.Action("Show", "Course", new { id = "" })
Run Code Online (Sandbox Code Playgroud)
bor*_*gas 12
我知道这是旧的,但我先发现了这个,但不喜欢任何这些解决方案,所以我一直在寻找并找到/sf/answers/1337764501/.
您可以UrlParameter.Optional用来解决这个问题
Url.Action("Show", "Course", new { id = UrlParameter.Optional })
我猜你的路由,你没有指定id是一个可选参数.这是示例项目中的默认路由.
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } //Parameter defaults
);
Run Code Online (Sandbox Code Playgroud)
请注意包含id = UrlParameter.Optional.如果没有这个,你就会得到你所描述的行为,因为它认为id是强制性的.
另外,如果您的Show操作并不总是具有id,那么它应该可以为空或提供默认值.
public ActionResult Show(int? id)
public ActionResult Show(int id = 0)
Run Code Online (Sandbox Code Playgroud)
否则,当您尝试加载没有id参数的url时,您将收到错误.
| 归档时间: |
|
| 查看次数: |
20954 次 |
| 最近记录: |