2012-05-31 3 views
0

У меня очень странное поведение с помощью хелпера checkbox (синтаксис бритвы). Последовательность шагов:Странное поведение с флажком в Asp.Net MVC 3 (Razor)

В индексной ActionResult я строй ViewModel, который будет показан в сети:

var viewModel = new MyViewModel 
{ 
    Field1 = service.GetField(), 
    Field2 = otherService.GetField() 
    Field3 = otherService.Class.BooleanField 
}; 

Field3 является «вынесен» с:

@Html.CheckBoxFor(model => model.Field3, new { @class = "something" }) 

Когда страница загружена, я могу видеть флажок с проверенным состоянием (когда логическое значение верно, конечно).

Когда страница загружена, запускается событие «OnReady» JQuery. В этом методе я вызываю (через AJAX) ActionResult, который вычисляет цену, основанную на параметрах, которые он получает от ViewModel.

Не знаю, почему, но параметр Field3 имеет значение «false», хотя значение имеет значение true, а флажок имеет состояние проверки. После этого, если я изменю какой-либо элемент управления, который запускает этот расчет, ViewModel, который принимает этот метод, содержит это поле3, но с правильным значением (true).

Я искал возможные взаимодействия с этим значением, но ничего не нашел и, как я уже сказал, поле корректно проверяется при выполнении вызова AJAX.

Спасибо!

Ps: HTML извлекаться с FireBug:

<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"> 

Как вы можете видеть, состояние проверяется, но значение в скрытом ложно.

поиска информации с помощью AJAX, JQuery вызова:

$.ajax({ 
    type: "POST", 
    url: "/Controller/PerformCalculation", 
    data: $("#form").serialize(), 
    success: function (data) { 
     //UI Work 
    }, 
    beforeSend: function (data) { 
     //UI Work 
    } 
}); 

Как я сказал, второй раз, когда я выполнить вызов формы правильно передаваемый со значением, как истинным. Если я использую программное обеспечение, например Fiddle или HttpFox для проверки HTTP-вызова, «Field.Field» является ложным, хотя в браузере проверка проверена!

+3

Помните, что 'CheckBoxFor' отображает как флажок, так и скрытое поле со значением =" false ", и оба они имеют одинаковое имя. Он делает это, потому что, как правило, флажки выставляют свое значение, когда проверяются, и после НЕТХИРОВАНИЯ при снятии отметки. Поскольку отправлено только первое поле с заданным именем, скрытый заставляет форму публиковать «ложь», когда флажок не установлен. Возможно ли это, что вы видите? – bhamlin

+0

Спасибо большое bhamlin. Я читал об этом, но я не понимаю, как это может быть связано с моей проблемой. Да, у скрытого есть значение «false», но флажок имеет истинное состояние. Даже это видно в браузере! – IoChaos

+1

@loChaos, можете ли вы показать нам, как вы отправляете данные о готовом событии jQuery? –

ответ

0

Как вы определяете состояние флажка в jQuery? Я использую $ («# checkboxId»). Attr («checked») в настоящее время, чтобы получить его значение.

+0

Спасибо Yarx. Информация извлекается jQuery (form.serialize) и отправляется методу ActionResult. Таким образом, состояние флажка определяется на стороне сервера и является ложным !. – IoChaos

Смежные вопросы