我的控制器中有以下操作。第一个(顶部)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>
答案 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服务器?这是向服务器获取值还是将值绑定到对象的问题?