错误
参数字典包含参数'UserId'的空条目 非可空类型'System.Int64'的方法 'System.Web.Mvc.ActionResult Predict(Int64)'in 'sportingbiz.Controllers.PredictionController'。可选参数 必须是引用类型,可空类型,或声明为 可选参数。参数名称:参数
这不起作用。抛出上面提到的错误
http://mysite/User/Profile/15
这有效
http://mysite/User/Profile/?UserID=15
控制器动作
public ActionResult Profile(long UserID)
{
}
当我将参数名称更改为Id
时,它可以正常工作。我认为这是因为路由集合(Global.asax)中指定了Id
。是否有可能告诉MVC UserId
应该映射到Id
而不在Global.asax
答案 0 :(得分:5)
实现这一目标的唯一方法(没有进入定制的ModelBinder,它变得非常毛茸茸)是:
public ActionResult Profile(long? UserID)
{
UserID = UserID ?? long.Parse((string)RouteData.Values["id"]);
}
答案 1 :(得分:0)
我总是在控制器上创建一个像id一样通用的id param,然后你不必创建很多路由来匹配不同的id类型。
如果您没有使用可为您的id可为空的字符串,则可以提供默认值,例如long id = 0,并将零值作为默认的起始序列处理。
例如,在分页方法中,您可以将其设置为零,这样您就不需要在第一页上使用任何参数,但之后传递它将请求该页码等等
的Si
答案 2 :(得分:0)
我认为已经发布的代码应该可行,所以我测试了我的版本并且它有效:
public ActionResult Profile(long? UserID)
{
if (UserID.HasValue)
{
}
else if (this.RouteData.Values["id"] != null)
{
long tempValue = 0;
if (long.TryParse(this.RouteData.Values["id"].ToString(), out tempValue))
{
UserID = tempValue;
}
}
return View();
}
希望它有所帮助。