我在使用复选框助手(剃刀语法)时遇到了一个非常奇怪的行为。步骤顺序是:
在 Index ActionResult 中,我构建了将在 Web 中显示的 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参数虽然值为true,但为'false',并且复选框处于选中状态。之后,如果我更改任何触发此计算的控件,接收该方法的 ViewModel 将包含此 Field3,但具有正确的值 (true)。
我一直在寻找与此值的可能交互,但我什么也没找到,正如我所说,在进行 AJAX 调用时正确检查了该字段。
谢谢!
Ps:使用 FireBug 检索的 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
}
});
正如我所说,第二次执行调用时,表单被正确发送,值为 true。如果我使用Fiddle或HttpFox之类的软件来检查 HTTP 调用,“Field.Field”是错误的,尽管在浏览器中检查了检查!