【发布时间】:2015-12-16 06:01:54
【问题描述】:
我有这个动作方法:
public virtual ActionResult NewsByCategory(int code)
{...}
我有两个这样的路由器:
routes.MapRoute("lang",
"{lang}/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new[] { "CMS.mvcApp.Controllers" });
routes.MapRoute("langCode",
"{lang}/{controller}/{action}/{code}",
new { controller = "Home", action = "Index", code = UrlParameter.Optional },
new[] { "CMS.mvcApp.Controllers" });
我有以下要求:
locallhost:3354//En/News/NewsByCategory/12345
我收到此错误:
参数字典包含“CMS.mvcApp.Controllers.NewsController”中方法“System.Web.Mvc.ActionResult NewsByCategory(Int32)”的不可为空类型“System.Int32”的参数“代码”的空条目.可选参数必须是引用类型、可空类型或声明为可选参数
为什么它不起作用?
【问题讨论】:
-
/En/News/NewsByCategory/12345matches 你的第一个路由,所以它的值12345分配给id和code是null因此错误 -
要么删除第二个路由定义(并将方法更改为
NewsByCategory(int id)),要么为NewsByCategory创建一个特定路由。 -
我想通过第二条路线匹配。我要设置参数名称
Code。 -
您无法匹配第二条路线(因为它与第一条路线匹配!)。为什么你特别需要它是
code只有你知道,但你可以创建一个特定的路线routes.MapRoute("langCode", "{lang}/News/NewsByCategory/{code}", new { controller = "News", action = "NewsByCategory" })但你需要在你的默认路线之前移动它 -
@PsarTak 是的,但它们是可选的,但你得到了答案,路线取决于路线,然后是参数:-)
标签: c# asp.net-mvc asp.net-mvc-4