2012-05-31 98 views
0

我用複選框助手(剃刀語法)遭受了一個非常奇怪的行爲。步驟的順序是: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,雖然在瀏覽器中檢查檢查!

+3

請注意,「CheckBoxFor」呈現值爲「false」的複選框和隱藏字段,並且它們都具有相同的名稱。它這樣做是因爲通常,複選框在選中時發佈它們的值,在未選中時發佈任何值。由於只有具有給定名稱的第一個字段纔會發佈,因此當取消選中該複選框時,隱藏會強制該表單發佈'false'。它有可能是你看到的嗎? – bhamlin

+0

非常感謝bhamlin。我一直在閱讀這篇文章,但我無法理解它是如何與我的問題相關的。是的,隱藏具有「假」值,但複選框具有真實狀態。即使它在瀏覽器中可見! – IoChaos

+1

@loChaos,你能向我們展示如何在準備好的jQuery事件中提交數據嗎? –

回答

0

你如何確定複選框的狀態在jQuery中?我使用$(「#checkboxId」)。attr(「checked」)來獲取它的值。

+0

謝謝雅克斯。信息由jQuery(form.serialize)檢索併發布到ActionResult方法。所以複選框的狀態是在服務器端確定的,並且是錯誤的! – IoChaos