【发布时间】: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