2011-09-21 68 views
28

我想加載用戶的數據編輯它,然後保存它。這一直和IM不太清楚,我改變,但現在我得到以下錯誤...MVC3值不能爲空。參數名稱:值

Value cannot be null. 
Parameter name: value 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.ArgumentNullException: Value cannot be null. 
Parameter name: value 

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace: 


[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() +8897857 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184 


    public ActionResult EditDetails() 
    { 
     int id = Convert.ToInt32(Session["user"]); 
     S1_Customers u1_users = storeDB.S1_Customers.Find(id); 
     return View(u1_users); 
    } 

    [HttpPost] 
    public ActionResult EditDetails(S1_Customers u1_users) 
    { 
     var Pcode = ""; 
     if (ModelState.IsValid) 
     { 

我不是甚至達到ModelState.IsValid當我點擊提交

+2

請張貼您的模型代碼,以及您要調用的動作以保存此..看起來有一些驗證問題,但需要更多信息....爲什麼這個問題會得到一個下拉菜單,投票? –

回答

24

你改變任何名字呢?表單名稱必須映射1-1與您的Action參數。在這種情況下,「name」參數未傳遞給控制器​​操作,因此它爲空。

胡亂猜測,需要更多的信息(行動的方法簽名)

+10

啊你好傻我這是因爲我這樣做... [顯示(姓名=「」)] 公共字符串Addrs {get;組; } – Beginner

+0

:)很高興它的修復。 –

+5

我不確定它是否是相同的問題,但如果我應用具有StringLength屬性的成員並且應用[DisplayName(「」)],我會得到相同的異常。 –

2

它最有可能可能是您的模型有一個返回不可爲空值的屬性,如intDateTimedouble等。如果用戶正在更新您可能未將該值存儲在隱藏字段或某處的條目,因此當數據返回時,該特定屬性爲null。無論是地方,都歸到一個隱藏字段或通過改變INT爲int使模型的特性可爲空?等

16

,如果你有一些屬性由DisplayAttribute飾以空名稱您會收到錯誤 ([DisplayAttribute(Name = "", Description = "Any description")])

+0

難以置信,在回答這個問題之前,我花了這麼長時間。 –

10

如果您使用[顯示(名稱=「」)]作爲您的模型的屬性,這將導致您得到的錯誤。爲了解決這個問題,你應該避免使用空的顯示名稱屬性。

[Display(Name = "")] //this line is the cause of error 
public string PromotionCode { get; set; } 
相關問題