我用複選框助手(剃刀語法)遭受了一個非常奇怪的行爲。步驟的順序是:Asp.Net MVC 3中的複選框的奇怪行爲(剃刀)
在指數的ActionResult我建立,將在網絡中給出的視圖模型:
var viewModel = new MyViewModel
{
Field1 = service.GetField(),
Field2 = otherService.GetField()
Field3 = otherService.Class.BooleanField
};
的字段3的「渲染」有:
@Html.CheckBoxFor(model => model.Field3, new { @class = "something" })
當頁面被加載,我可以看到複選框與檢查狀態(當布爾值是真的,當然)。
當頁面加載時,啓動「OnReady」Jquery事件。在這個方法中,我調用(通過AJAX)一個ActionResult來計算基於他從ViewModel接收到的參數的價格。
不知道爲什麼,但Field3參數爲'false',雖然值爲true,並且複選框處於選中狀態。之後,如果我更改了引發此計算的任何控件,則接收該方法的ViewModel包含此Field3但具有正確的值(true)。
我一直在尋找可能的交互與這個值,但我什麼都沒有找到,正如我所說的,當AJAX調用時正確地檢查該字段。
謝謝!
PS:HTML檢索與螢火:
<input id="Field_Field" class="canRequestCalculation" type="checkbox" value="true" name="Field.Field" data-val-required="Mandatory field" data-val="true" checked="checked">
<input type="hidden" value="false" name="Field.Field">
正如你所看到的狀態進行檢查,但在隱藏值爲false。
信息檢索由AJAX調用的jQuery:
$.ajax({
type: "POST",
url: "/Controller/PerformCalculation",
data: $("#form").serialize(),
success: function (data) {
//UI Work
},
beforeSend: function (data) {
//UI Work
}
});
正如我所說的,我第二次執行呼叫的形式正確地爲真值發送。如果我使用軟件小提琴或HttpFox檢查HTTP調用,「Field.Field」爲false,雖然在瀏覽器中檢查檢查!
請注意,「CheckBoxFor」呈現值爲「false」的複選框和隱藏字段,並且它們都具有相同的名稱。它這樣做是因爲通常,複選框在選中時發佈它們的值,在未選中時發佈任何值。由於只有具有給定名稱的第一個字段纔會發佈,因此當取消選中該複選框時,隱藏會強制該表單發佈'false'。它有可能是你看到的嗎? – bhamlin
非常感謝bhamlin。我一直在閱讀這篇文章,但我無法理解它是如何與我的問題相關的。是的,隱藏具有「假」值,但複選框具有真實狀態。即使它在瀏覽器中可見! – IoChaos
@loChaos,你能向我們展示如何在準備好的jQuery事件中提交數據嗎? –