2009-04-24 42 views
2

我的視圖頁面包含搜索按示例形式用下面的複選框代碼:這是CheckBox HtmlHelper的意外行爲嗎?

<td> 
<label for="HasProcessErrors">Has Errors:</label> 
<%= Html.CheckBox("HasProcessErrors", crit.HasProcessErrors) %> 
</td> 

的爆擊對象HasProcessErrors屬性是布爾,其初始值是假的。當我認爲我的渲染頁面的源代碼,我看到了助手已經產生下面的HTML:

<td> 
<label for="HasProcessErrors">Has Errors:</label> 
<input id="HasProcessErrors" name="HasProcessErrors" type="checkbox" value="true" /><input name="HasProcessErrors" type="hidden" value="false" /> 
</td> 

有我使用的複選框幫手這裏不正確,或者是一些奇怪的事情?它似乎應該生成與checked =「」類型複選框的輸入。

感謝您的任何想法。

回答

3

是的,這是正確的。

複選框的語義與您的想法有點不同;而不是發佈一個值,指示它的選中/未選中狀態,選中的複選框會發布任何在其「值」屬性中的內容,而未選中的複選框則不會發布任何內容。

這裏還有具有相同名稱的隱藏字段,如果您調試表單提交,你會發現一個選中的複選框的值是「真,假」,而一個未經檢查框的值是「假」

您可以確定是否通過測試檢查複選框是否包含「true」。

 
public ActionResult(FormCollection form) 
{ 
    bool checked = form["checkbox_id"].ToString().Contains('true'); 
} 
+0

大衛,謝謝。我發現這樣做是爲了克服這個事實,即如果複選框未被選中,瀏覽器將不會向服務器回發一個值。我只需要在這裏改變我的想法,因爲在添加複選框之前,我的表單數據已經很好地綁定到了我的強類型SearchCriteria對象。現在我需要遍歷FormCollection對象來檢索值並手動將值傳遞給我的SearchCriteria對象。 – 2009-04-24 20:48:18