У меня очень странное поведение с помощью хелпера 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» является ложным, хотя в браузере проверка проверена!
Помните, что 'CheckBoxFor' отображает как флажок, так и скрытое поле со значением =" false ", и оба они имеют одинаковое имя. Он делает это, потому что, как правило, флажки выставляют свое значение, когда проверяются, и после НЕТХИРОВАНИЯ при снятии отметки. Поскольку отправлено только первое поле с заданным именем, скрытый заставляет форму публиковать «ложь», когда флажок не установлен. Возможно ли это, что вы видите? – bhamlin
Спасибо большое bhamlin. Я читал об этом, но я не понимаю, как это может быть связано с моей проблемой. Да, у скрытого есть значение «false», но флажок имеет истинное состояние. Даже это видно в браузере! – IoChaos
@loChaos, можете ли вы показать нам, как вы отправляете данные о готовом событии jQuery? –