我使用腳手架代碼創建了一個強類型的MVC3 Razor視圖。MVC3 Html.HiddenFor(Model => Model.Id)沒有傳遞迴控制器
該模型是一個基本類型爲PersistentEntity
的POCO,它定義了一個名爲Created,Updated和Id的屬性。
Id是一個int,Created和Updated是DateTime。我使用Html.HiddenFor
在視圖上創建隱藏字段。
@Html.HiddenFor(model => model.Id)
@Html.HiddenFor(model => model.Created)
@Html.HiddenFor(model => model.Updated)
在頁面上,隱藏輸入正在正確渲染,並將Id設置爲值。
<input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." id="Id" name="Id" type="hidden" value="12">
然而,當頁面被提交到控制器[HttpPost]Edit(Model model)
id屬性始終爲0創建並更新與從視圖中的值無誤。
這應該是12,在這個主題的示例的情況下。出了什麼問題?
我知道我可以在方法簽名更改爲[HttpPost]Edit(int personID, Person model)
爲PERSONID是在get字符串,但是爲什麼模型沒有得到與隱藏字段填入?
更新
的問題是,在PersistentEntity
二傳手是受保護的,ASP不能設置屬性,嚥了下去。將此更改爲公開已解決問題。
public abstract class PersistentEntity
{
public virtual int Id { get; protected set; }
public virtual DateTime Created { get; set; }
public virtual DateTime Updated { get; set; }
}
這應該工作。你是否在你的課堂中檢查過構造函數和屬性設定器? – Dabblernl
它適用於我,所以我們錯過了沒有提到的問題 - 自定義綁定,自定義JavaScript表單提交,類似的東西... – Giedrius
包含Id屬性的模型類是怎麼樣的? –