2010-07-08 59 views
0

我在我的控制器中有以下操作。第一个(顶部)Edit工作正常,并提供正确的值。然而,在第二个,即'返回'Edit中,模型的每个属性都是默认值,即ref类型为null,值类型为零。我检查了HTTP发布数据,它具有正确命名的所有属性并具有正确的值。什么可能是错的?空值返回到控制器编辑操作

控制器摘录:

 [Authorize(Order = 0, Roles = "Requester, Controller")] 
     public ActionResult Edit(int id) 
     { 
      JobCardViewData viewData = ViewDataFactory.CreateBaseViewData<JobCardViewData>("Installation Details"); 
      viewData.JobCard = new JobCardService().GetById(id); 
      return View(viewData); 
     } 

     [HttpPost] 
     public ActionResult Edit(JobCard model) 
     { 
      try 
      { 
       new JobCardService().Update(model); 
       var x = RedirectToAction("Index"); 
       return RedirectToAction("Index"); 
      } 
      catch (Exception) 
      { 

       return RedirectToAction("Edit", new {id = model.InstallationNumber}); 
      } 
     } 

查看摘录:

 <div class="editor-label"> 
      <%: Html.LabelFor(model => model.JobCard.Name) %> 
     </div> 
     <div class="editor-field"> 
      <%: Html.TextBoxFor(model => model.JobCard.Name) %> 
      <%: Html.ValidationMessageFor(model => model.JobCard.Name) %> 
     </div> 

     <div class="editor-label"> 
      <%: Html.LabelFor(model => model.JobCard.Surname) %> 
     </div> 
     <div class="editor-field"> 
      <%: Html.TextBoxFor(model => model.JobCard.Surname) %> 
      <%: Html.ValidationMessageFor(model => model.JobCard.Surname) %> 
     </div> 
+0

你可能只是显示生成的HTML看起来像什么?也许模型看起来像什么? – 2010-07-09 12:52:34

回答

2

菲尔Using ViewModel Pattern with MVC 2 Strongly Typed HTML Helpers

参考这个答案当您使用强类型的辅助抗类型,助手创建表单字段假设这是你发布到类型。当类型不匹配时,就会出现问题。

在这种情况下,发布到(JobCard)的类型与最初创建的视图的类型不同(JobCardViewData)。

尝试将方法签名更改为ffg,并且我几乎可以肯定JobCard值将填充到模型中。

[HttpPost] 
public ActionResult Edit(JobCardViewData model) 
{ ... } 

菲尔提出了两种方法可以用来解决这个问题。

+0

http://stackoverflow.com/questions/2494940/custom-viewmodel-with-mvc-2-strongly-typed-html-helpers-return-null-object-on-cre/2500327#2500327 – Ahmad 2010-07-09 13:36:49

+0

哈!你完全正确。我盯着代码大约15分钟,但没看到它。数据正在到达服务器,但不是可以自动绑定到action方法中的参数的格式。 – a7drew 2010-07-09 15:38:33

0

您可以检查使用招(或别的)的原始HTTP POST的内容,并确认值实际上发送到Web服务器?这是获取服务器值还是将值绑定到对象的问题?

+0

你是第二个推荐的人,我会尽快尝试,谢谢,但是关于绑定,我使用'TextBoxFor',而不是'绑定'方法,所以我不知道如果问题是绑定。 – ProfK 2010-07-09 07:56:01

+0

请参阅我的编辑。该帖子(使用Firebug)包含所有正确的数据。 – ProfK 2010-07-09 12:11:54

相关问题