MVC 3(剃刀)中复选框 Asp.Net 奇怪的行为

本文关键字:Net Asp 复选框 剃刀 MVC | 更新日期: 2023-09-27 18:35:50

我在使用复选框助手(剃刀语法)时遇到了非常奇怪的行为。步骤顺序如下:

在索引操作结果中,我构建了将在 Web 中显示的视图模型:

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:使用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。如果我使用 FiddleHttpFox 等软件来检查 HTTP 调用,"Field.Field"是错误的,尽管在浏览器中检查了检查!

MVC 3(剃刀)中复选框 Asp.Net 奇怪的行为

你如何确定jQuery中复选框的状态?我目前使用 $("#checkboxId").attr("checked") 来获取它的值。