2012-02-04 64 views
11

我有一個Razor局部視圖,後者包含一個視圖模型,其中包含一個名爲UseDuo的bool。比方說,UseDuo屬性爲true,我把下面的代碼在我的剃刀:即使模型值爲真,Html.CheckBoxFor也未檢查

@Html.CheckBox("UseDuo", Model.UseDuo) @* Not checked *@ 
@Html.CheckBoxFor(m => m.UseDuo) @* Not checked *@ 
@Html.CheckBox("UseDuo2", Model.UseDuo) @* checked *@ 
@(Model.UseDuo ? "UseDuo=true" : "UseDuo=false") @* outputs UseDuo=true *@ 

前兩個複選框問世未被選中,但第三個被選中,最後一行輸出爲「UseDuo =真正」。是什麼賦予了?根據我對這些Html助手的理解,應該檢查所有三個複選框。但似乎如果我的複選框的名稱匹配我的模型屬性的名稱,它拒絕正確檢查。

我試着調試到.Net MVC源代碼中,但調試器拒絕給我調用大部分變量的值,所以這並沒有太大的幫助。

編輯:剛纔意識到這裏沒有真正的問題。我的問題:爲什麼不檢查前兩個框?

+1

這發生在POST,還是總是? – 2012-02-04 16:41:52

+0

不知道我明白這個問題。包含此Razor的頁面正在使用GET進行提取。 – eliah 2012-02-04 16:47:18

回答

19

如果@Html.CheckBoxFor(m => m.UseDuo)呈現未勾選的複選框,並且您已驗證Model.UseDuo = true,則唯一可能的原因是模型狀態中已存在與您的模型衝突的UseDuo值。爲了確保這一點,請返回視圖之前將其取出:

ModelState.Remove("UseDuo"); 

還是要整個清除的ModelState:

ModelState.Clear(); 

現在複選框助手會選擇從你的模型中的價值。如果複選框被選中,您將不得不查找UseDuo值已插入模型狀態的代碼部分。

相關問題