2011-09-26 45 views
15

我使用腳手架代碼創建了一個強類型的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創建並更新與從視圖中的值無誤。

enter image description here

這應該是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; } 
} 
+1

這應該工作。你是否在你的課堂中檢查過構造函數和屬性設定器? – Dabblernl

+1

它適用於我,所以我們錯過了沒有提到的問題 - 自定義綁定,自定義JavaScript表單提交,類似的東西... – Giedrius

+1

包含Id屬性的模型類是怎麼樣的? –

回答

14
public virtual int Id { get; protected set; } 

protected set;<!--這是你的問題。如果您希望默認模型聯編程序能夠分配值,則需要公共設置器

+0

是的,這是問題 - 感謝您的幫助。 – Darbio

+1

如果你正在看這篇文章,並且你已經在你的POCO上有一個公共setter,你可能會覺得這篇文章很有用:http://stackoverflow.com/questions/3606087/why-mvc-html-hiddenfor-does-not -render,我場 – gb2d

相關問題