2011-03-29 62 views
4

當我嘗試序列化jQuery中的<%: Html.CheckBox("Something", true) %>(使用form.serialize())時,我得到兩個複選框,一個表示true,另一個表示false。我知道,MVC呈現真,假的複選框是真實的,所以如果我沒有通過javascript,我只是檢查是否存在真,但我怎麼知道如果我的複選框後做表格檢查。連載?Html.CheckBox呈現兩個複選框

回答

4

如果你看看輸出的HTML - 你會發現Html.Checkbox()實際上在其中呈現了一個額外的隱藏輸入。這就是爲什麼你看到兩個值。我相信微軟決定這樣做,以便一個適當的布爾獲取張貼(而不是一個字符串值的'開'複選框)。

爲了解決這個問題,我從來不再使用Html.Checkbox()助手,我總是自己寫完整的HTML。

+0

好像標準html複選框將它設置爲「on」,如果它被選中而不是布爾值。在將它發送到我的服務器之前,如何將值「on」轉換爲true? – Prabhu 2011-03-29 16:55:10

+0

您可以覆蓋複選框的值,以便在發佈時發送您選擇的特定值。所以,你可以做的是:。當該複選框被選中時,jQuery表單序列化將mycheckbox = true。如果未選中,則不會序列化值。 – DNR 2011-03-29 17:16:09

+0

有趣的是,我在模型中添加了一個與複選框控件的名稱相匹配的屬性,但即使序列化字符串的值爲複選框,模型屬性始終爲false。我必須在我的操作方法中添加一個額外的參數來收集複選框的值。 – Prabhu 2011-03-29 17:44:17

0

爲什麼不乾脆:

var isChecked = $('#idofyourcheckbox').is(':checked'); 

至於存儲在form.serialize()字符串的值都在關注他們註定要到服務器,你可以簡單地用布爾屬性的作用。