将MVC 2升级到MVC3会获得Model绑定器异常

时间:2011-07-29 10:05:03

标签: asp.net-mvc-3 modelbinder

升级后,我收到一些视图的错误。

Value cannot be null. Parameter name: value

堆栈跟踪

[ArgumentNullException: Value cannot be null.
Parameter name: value]
   System.ComponentModel.DataAnnotations.ValidationContext.set_DisplayName(String value) +51903
   System.Web.Mvc.<Validate>d__1.MoveNext() +135
   System.Web.Mvc.<Validate>d__5.MoveNext() +318
   System.Web.Mvc.DefaultModelBinder.OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext) +139
   System.Web.Mvc.DefaultModelBinder.BindComplexElementalModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Object model) +66
   System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +1367
   System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +449
   System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) +317
   System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +117
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +343
   System.Web.Mvc.Controller.ExecuteCore() +116
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +97
   System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
   System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +37
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
   System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +50
   System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7
   System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8920029
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184

任何人都知道问题可能存在吗?

编辑: 发现了问题,

[RequiredRequestedOnSiteDate]
[DisplayName("")]
public Date RequestedOnSiteDate { get; set; }

在MVC2中这是有效的,我们不希望这个文本框的显示名称,因为名称显示在标题中。如何在没有错误的情况下没有显示名称?感谢

3 个答案:

答案 0 :(得分:0)

猜测......

不是在模型的DisplayName属性上使用[Required],而是在setter中有一个陷阱,它会在null值上抛出异常,而binder正在尝试将该属性设置为null,因为这是从表单中传入的内容

向我们提供模型代码(以及可能的控制器操作方法),以便我们可以获得更好的想法。

答案 1 :(得分:0)

您只需从代码中删除@Html.DisplayFor(m => m.RequestOnSiteDate),就永远不会看到名称。

答案 2 :(得分:0)

安德斯 这是几年之后,我在MVC4中遇到了完全相同的错误。

[DisplayName("")]
public NexEnum.Veteran Veteran { get; set; }

你有没有解决它? 我解决了这个问题:

[DisplayName(" ")]
public NexEnum.Veteran Veteran { get; set; }