Null值返回到Controller for Edit操作

时间:2010-07-08 15:07:50

标签: asp.net asp.net-mvc

我的控制器中有以下操作。第一个(顶部)Edit工作正常并提供正确的值。但是,在第二个中,即'return'Edit,模型的每个属性都是默认值,即ref类型为null,值类型为零。我检查了HTTP post数据,它具有正确命名的所有属性并具有正确的值。可能有什么不对?

控制器摘录:

        [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>

2 个答案:

答案 0 :(得分:2)

请参阅Phil Using ViewModel Pattern with MVC 2 Strongly Typed HTML Helpers

的回答

当您对类型使用强类型帮助程序时,帮助程序会创建表单字段,假设您要发布到的类型。当类型不匹配时,就会出现问题。

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

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

[HttpPost]
public ActionResult Edit(JobCardViewData model)
{ ... }
菲尔提出了两种可用于解决此问题的方法。

答案 1 :(得分:0)

您可以使用Fiddler(或其他任何东西)检查原始HTTP POST的内容,并确认这些值实际上是否已发送到Web服务器?这是向服务器获取值还是将值绑定到对象的问题?