【问题标题】:Value for checkbox is not true when checked in MVC 3在 MVC 3 中选中时复选框的值不正确
【发布时间】:2012-05-17 20:55:08
【问题描述】:

我有一个非常奇怪的情况,我将一个复选框中的值发布到我的控制器,这不是真的,即使选中了!

我的视图模型的一部分:

public class BeslutIStortViewDTO
{
    public BeslutIStortDTO BeslutIStort { get; set; }
    public BeslutIStortListorDTO SelectListor { get; set; }
}

public class BeslutIStortDTO
{
    public int id { get; set; }
    public bool Ok { get; set; }
    ... other stuff
}

我的部分观点:

<div id="colOk" class="kolumn_header">
    @Html.LabelFor(model => model.BeslutIStort.Ok)
    @Html.CheckBoxFor(model => model.BeslutIStort.Ok, new { @class = "rensa", tabindex = 5 })
</div>

在传递给控制器​​的字符串中,当未选中该框时,一切似乎都正常:

BeslutIStort.Ok=false

但是!当我检查它时:

BeslutIStort.Ok=&BeslutIStort.Ok=false

它在字符串中出现了两次,第一次没有值,另一个是false,所以都是错误的。我当然希望只有一个,那个是true

另一个有趣的发现是,在实际渲染的 html 中,复选框看起来像这样:

<input class="rensa" id="BeslutIStort_Ok" name="BeslutIStort.Ok" tabindex="5" type="checkbox" value="true" /><input name="BeslutIStort.Ok" type="hidden" value="false" />

它有一个隐藏的字段!

当我将值发布到服务器时,我使用 ajax 进行,数据参数定义如下:

data: $("#BisData").serialize(),

我希望有人可以帮助我对此有所了解,并帮助我为我的控制器获得一些“真实”:-)

=== S O L V E D === 事实证明,我有这样的javascript:

$(".rensa").val("");

这使得复选框不起作用。我添加了这个:

$(".rensaCheckbox").attr("checked", false);

对于复选框,现在它可以工作了。

【问题讨论】:

  • #BisData 是表单标签 ID?
  • k.. u 添加警报($("#BisData").serialize());把这个输出放在这里...
  • 这是我在问题中得到的两行代码,BeslutIStort.Ok=&BeslutIStort.Ok=false 和 BeslutIStort.Ok=false。它还包含其他数据,但这是正常的。

标签: javascript jquery asp.net-mvc-3


【解决方案1】:

也没有那么奇怪..
首先你已经收到了两次价值BeslutIStort.Ok=&amp;BeslutIStort.Ok=false 因为 Razor 引擎会在您使用 @Html.CheckboxFor()
这样做是为了即使未选中复选框,也会返回 false 值。

第二...您收到空值,因为您的输入(复选框)html 控件上没有值。如果您希望返回一个值,只需使用以下代码添加一个

<div id="colOk" class="kolumn_header">
    @Html.LabelFor(model => model.BeslutIStort.Ok)
    @Html.CheckBoxFor(model => model.BeslutIStort.Ok, new { @class = "rensa", tabindex = 5,value="true" })
</div>

【讨论】:

  • 它将生成的 html 更改为 ,但不幸的是序列化时是一样的。
  • 你的意思是你是这样的...BeslutIStort.Ok=&BeslutIStort.Ok=false
  • 是的,选中后。不检查时,只有 BeslutIStort.Ok=false
  • 我的意思是当它现在被检查时你得到 BeslutIStort.Ok=true&BeslutIStort.Ok=false
  • 不,我期待,它仍然是BeslutIStort.Ok=&BeslutIStort.Ok=false(一空一假)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-06
  • 2013-09-18
  • 1970-01-01
  • 2016-10-31
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
相关资源
最近更新 更多