2013-02-20 59 views
3

我在我看來,這樣有一個隱藏字段:Html.Hidden場沒有得到設置

using (Html.BeginForm("Action", "Schedule")) 
{ 
    @Html.Hidden("Id", Model.Schedule.Id) 
    ... 
} 

而這需要在這樣的信息的操作方法:我不斷收到

public ActionResult AddEventToSchedule(Event NewEvent, Guid Id) 
{ 
    // Do something 
} 

即使Model.Schedule.Id不爲空,也會傳入一個空Guid。我檢查了html源代碼,隱藏的字段也是一個空的Guid(使用斷點來驗證Model.Schedule.Id是否爲空)。

奇怪的是,當我試圖通過如下模型訪問Id值時,html隱藏字段使用guid正確填充,但傳入action方法的模型是空的。

public ActionResult AddEventToSchedule(Event NewEvent, ScheduleModel model) 
{ 
    // model.Schedule is null! 
} 

回答

13

想通了這一點這個問題的幫助: MVC3 Model Binding - List to Hidden fields

顯然HTML輔助檢查ModelState中的價值,他們檢查模型前。 當我將Id作爲參數添加到操作方法時,我只看到了這種行爲的原因是,這會調用模型聯編程序以使用Id填充ModelState。爲什麼Id始終是一個空Guid的原因是因爲這是第一次調用操作方法時的值。

我加入這行到我的操作方法和現在的一切工作正常:

ModelState.Remove("Id") 
+0

它幫助我通過使用代替@ Html.HiddenFor(m => m.Name) – ravithejag 2016-05-19 09:39:25

相關問題