2016-11-16 81 views
-1

任何人都可以向我解釋下面的代碼如何導致下面的HTML?在HTML中生成的重複輸入/輸入保存不正確的值

<div class="col-sm-4 col-md-4"> 
    @Html.CheckBoxFor(m => m.IsFlatPrice) 
    @Html.ValidationMessageFor(m => m.IsFlatPrice) 
</div> 

<div class="col-sm-4 col-md-4"> 
    <input id="IsFlatPrice" name="IsFlatPrice" type="checkbox" value="true"> 
    <input name="IsFlatPrice" type="hidden" value="false"> 
    <span class="field-validation-valid" data-valmsg-for="IsFlatPrice" data-valmsg-replace="true"></span> 
</div> 

而且值預期爲假的模型屬性。

回答

2

CheckBoxFor()方法會生成2個輸入,<input type="checkbox" .. /><input type'"hidden" .. />以確保在您提交表單時將值返回。

如果複選框被選中,窗體將同時發送true(複選框的值)和false(隱藏輸入的值)爲你的財產,但DefaultModelBinder基礎上設置第一個值(該屬性值true)並忽略第二個值。

如果取消選中該複選框,表單將僅發送隱藏輸入的值(false),因爲未選中的複選框不會發送其值。

而且值預期爲假的車型屬性是 - 幸運的是,情況並非如此,因爲如果是這樣,你的財產將永遠是POST方法false,無論該複選框的狀態。

+0

好吧我不知道。 thx提及!但我仍然想知道爲什麼在models屬性爲false時爲什麼我的屬性IsFlatPrice的非隱藏複選框的值始終爲true,以及爲什麼選中/取消選中不會更新瀏覽器開發人員窗口中的當前值。我想我誤解了你的解釋,爲什麼複選框的值不反映模型屬性值。 –

+0

你需要仔細閱讀答案:)複選框有一個值(在這種情況下它的'value =「true」')。選中或取消選中複選框確實會更改其「值」 - 切換「checked」狀態。如果它被選中 - 它將其值返回('true'),如果它沒有被選中,它不會回發任何東西。 –

+0

哦該死的我混淆了價值和檢查 –