我有一個名爲Project的模型,它具有以下屬性(爲簡潔起見簡化)。MVC2 ModelBinder不綁定到模型的'id'屬性
[DataContract(IsReference = true)]
public class Project
{
[Key]
[DataMember]
public int id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public DateTime CreatedDate { get; set; }
}
該模型也是使用實體框架4查詢數據存儲的WCF服務的數據合同。該模型的代碼由一個模板生成,該模板根據實體框架模型自動生成一個CRUD服務層。
現在,我的MVC2應用程序有一個包含窗體來編輯字段的視圖。控制器「編輯」操作在POST後接受整個模型作爲參數。
[HttpPost]
public ActionResult Edit(Project project)
{
var context = new ServiceContext();
try
{
if (ModelState.IsValid)
{
project = context.UpdateProject(project);
return RedirectToAction("Index");
}
}
catch
{
ModelState.AddModelError("", "Could not save project");
}
return View(project);
}
現在,我的問題是,當表單發送到控制器,該項目模型具有所有的字段正確填充除了的「身份證」屬性,缺省值爲0
我做了一些挖掘和與谷歌大叔懇求答案,但我能得到的最接近的修復是以下添加到模型中的類,
[Bind(Include="id")]
,工作正常,但只填充「身份證」屬性, 意思是我將不得不明確指定要包含在模型綁定中的每個屬性。顯然,這可能會變得很討厭,特別是因爲模型本身比我上面顯示的更多屬性更多。
是否有其他方法可以使此工作?
直覺是[鑰匙]屬性與它有關,但我一直沒能弄清楚什麼。
表單具有'id'屬性的隱藏輸入。
<%: Html.HiddenFor(model => model.id)%>
謝謝,它已經是表單上的一個隱藏字段(忘記顯示在我原來的問題上)。它仍然無法正常工作... – tobias86 2011-03-17 09:49:31
通過刪除[Key]屬性 - mvc post ID中的viewmodel – swapneel 2011-03-17 10:09:52
不,它不。但它讓我走上了正軌。謝謝!請參閱下面的答案 – tobias86 2011-03-17 10:50:32