@Html.CheckBoxFor為何輸出兩種控件


在MVC中當使用@Html.CheckBoxFor時表單上會產生兩種控件checkbox和hidden,比如:

@Html.CheckBoxFor(model => model.IsTop)

對應

<input type ="checkbox" id="IsTop" name="IsTop" value="true"/>
<input type ="hidden" name="IsTop" value="false"/>

為何???且看關與Checkbox value 屬性的定義和使用:

value 屬性可設置或者返回 checkbox 的value屬性值。

復選框的 value 屬性值不會顯示在用戶界面中。value 屬性用於表單數據的提交(只有選中的復選框才會傳遞數據到服務端,如果什么都沒選則不傳遞復選框數據)。

至此就應該明白了。

當未選中復選框時,在Controller中接受到的數據為”false”,該值來自hidden控件,checkbox的值不會被傳遞,所以如果沒有同名的hidden控件,那么在Controller中是得不到[IsTop]參數的。

當選中復選框時,在Controller中接受到的數據就為”true,false”。

那么問題又來了,字符串”false”,”true”可以轉換成bool類型,那么”true,false”也可以嗎?答案自然是不可以的。

那MVC中又是如何轉換的呢?這里恕我沒查源碼,不能告知,但可以猜測是做了字符串的分割,以”,”為分隔符,取第一個子字符串。

另外如果我們不使用HTML輔助方法的形式,而是直接寫兩種控件,需要注意checkbox和hidden控件的順序不能顛倒,不然綁定到的值一直為”false”。

在一注意,checkbox選中時value默認值為”on”,需要顯示為value賦值為”true”。

說明:示例中的[IsTop]字段為bool類型。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM