【问题标题】:Weird behavior with checkbox in Asp.Net MVC 3 (Razor)Asp.Net MVC 3(Razor)中复选框的奇怪行为
【发布时间】:2012-05-31 17:06:02
【问题描述】:

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

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

如您所见,状态被选中,但隐藏中的值为假。

通过 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”是假的,尽管在浏览器中检查了检查!强>

【问题讨论】:

  • 请注意CheckBoxFor 会同时呈现一个复选框和一个 value="false" 的隐藏字段,并且它们都具有相同的名称。这样做是因为通常情况下,复选框在选中时发布其值,而在未选中时发布 NOTHING。由于仅发布具有给定名称的第一个字段,因此当未选中复选框时,隐藏会强制表单发布“假”。这可能就是您所看到的?
  • 非常感谢 bhamlin。我一直在阅读有关此内容的信息,但我不明白它与我的问题有何关系。是的,隐藏的具有“假”值,但复选框具有真状态。甚至它在浏览器中可见!
  • @loChaos,你能告诉我们你是如何在准备好的 jQuery 事件上提交数据的吗?
  • 当然法比奥,非常感谢。你现在可以看到了。
  • @loChaos - 你找到答案了吗?我也有同样的问题!谢谢。

标签: c# asp.net-mvc-3 razor


【解决方案1】:

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

【讨论】:

  • 谢谢 Yarx。信息由 jQuery (form.serialize) 检索并发布到 ActionResult 方法。所以复选框的状态是在服务器端确定的,是假的!。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 2020-08-29
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
相关资源
最近更新 更多