Asp.net-Mvc
MVC3 Html.HiddenFor(Model => Model.Id) 不傳回控制器
我使用腳手架程式碼創建了一個強類型的 MVC3 Razor 視圖。
該模型是一個 POCO,其基本類型
PersistentEntity定義了一個名為 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。 Created 和 Updated 正確地填充了來自視圖的值。
對於本文中的範例,這應該是 12。出了什麼問題?
我知道我可以將方法簽名更改
[HttpPost]Edit(int personID, Person model)為 personID 在 get 字元串中,但是為什麼模型沒有填充隱藏欄位?更新
問題是 setter on
PersistentEntity受到保護,ASP 無法設置該屬性,併吞下它。將其更改為 public 已經解決了這個問題。public abstract class PersistentEntity { public virtual int Id { get; protected set; } public virtual DateTime Created { get; set; } public virtual DateTime Updated { get; set; } }
public virtual int Id { get; protected set; }
protected set;<!--那是你的問題。如果您希望預設模型綁定器能夠分配值,則需要一個公共設置器。
