Action方法的预期参数名为Id,否则没有

cod*_*biz 0 c# asp.net-mvc asp.net-mvc-3

错误

参数字典包含非可空类型'System.Int64'的参数'UserId'的空条目,用于'sportingbiz.Controllers.PredictionController'中的方法'System.Web.Mvc.ActionResult Predict(Int64)'.可选参数必须是引用类型,可空类型,或者声明为可选参数.参数名称:参数

这不起作用.抛出上面提到的错误

http://mysite/User/Profile/15
Run Code Online (Sandbox Code Playgroud)

这有效

http://mysite/User/Profile/?UserID=15
Run Code Online (Sandbox Code Playgroud)

控制器行动

public ActionResult Profile(long UserID)
{

}
Run Code Online (Sandbox Code Playgroud)

当我更改参数名称时,Id它工作.我认为这是因为Id在路径集合(Global.asax)中指定了.是否有可能告诉MVC UserId应该映射到Id而不改变它Global.asax

McG*_*gle 5

实现这一目标的唯一方法(没有进入定制的ModelBinder,它真的很毛茸茸)是:

  1. 使参数可以为空
  2. 使用RouteData集合在事后设置属性.

 public ActionResult Profile(long? UserID)
 {
     UserID = UserID ?? long.Parse((string)RouteData.Values["id"]);
 }
Run Code Online (Sandbox Code Playgroud)