Asp.net-Mvc

MVC3 Html.HiddenFor(Model => Model.Id) 不傳回控制器

  • September 26, 2011

我使用腳手架程式碼創建了一個強類型的 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 onPersistentEntity受到保護,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; <!--那是你的問題。如果您希望預設模型綁定器能夠分配值,則需要一個公共設置器。

引用自:https://stackoverflow.com/questions/7553500