2013-07-09 79 views
0

我有一個缺少值標記的HiddenFor字段。這是使用剃鬚刀視圖引擎的MVC4項目。 (使用System.ComponentModel.DataAnnotations)HiddenFor缺失值標記

@Html.HiddenFor(m => m.Id, new { id = "teamId" }) 

從我的模型:

<input name="Id" id="teamId" type="hidden" data-val-required="The Id field is required." data-val-number="The field Id must be a number." data-val="true"/> 

這是從產生

public class TeamModel 
{ 
    public int Id { get; set; } 
    [Required(ErrorMessage = "Please enter a team name"), MaxLength(25)] 
    public string Name { get; set; } 
} 

當傳遞一個新的模型的形式我甚至嘗試手動設置Id字段,如下所示:

return PartialView("EditTeam", new TeamModel{Id = 5}); 

但是這仍然不顯示值。奇怪的是它通過客戶端驗證,但未通過服務器端驗證。我有一個類似的設置,在另一個項目工作正常。我看不到他們之間的任何差異。有什麼明顯的我錯過了嗎?謝謝:)

編輯: 如果我使用:

@Html.Hidden("test", Model.Id) 

它的工作原理。與HiddenFor的東西是將該值設置爲空(看到原始HTML值域是存在的,但只是設置爲:value =「」)

編輯: 爲了完整起見,這裏是控制器問題):

public ActionResult GetTeam(int? id) 
{ 
    return PartialView("EditTeam", id.HasValue ? _teamLogic.GetById(id.Value) : new TeamModel()); 
} 

回答

0

在這裏我要回答我的問題,我已經成功地解出這道題。 我應該已經加入此代碼的問題(這是被稱爲加載與窗體模態控制器):

public ActionResult GetTeam(int? id) 
{ 
    return PartialView("EditTeam", id.HasValue ? _teamLogic.GetById(id.Value) : new TeamModel()); 
} 

的問題是,該參數被傳遞在爲「ID」。當改成'teamId'時,它就起作用了。我猜MVC試圖很聰明,並將其識別爲模式中的關鍵值,因此在調用new時將其設置爲空白。

0

你嘗試過:

@Html.HiddenFor(m => m.Id, new { id = "teamId", value=Model.Id }) 
+0

這似乎應該工作,但它沒有。價值仍然通過空/空白。 – Tikeb

+0

這很奇怪,我剛剛在我自己的代碼中測試過,它正在工作:S – Vic

+0

對不起,我錯過了最初問題中的控制器。我會更新問題並標記我的答案已完成 – Tikeb

0

爲什麼你需要第二個參數?

@Html.HiddenFor(m => m.Id, new { id = "teamId" }) 

如果從控制器返回正確的模型,這將是不夠的:

@Html.HiddenFor(m => m.Id) 
+0

我添加它只是一種在調試時更容易識別它的方法。有或沒有。 – Tikeb

+0

也許這個對話與類似的問題,幫助你http://stackoverflow.com/questions/6850174/html-hiddenfor-value-property-not-getting-set – speti43