在MVC 3中选中时,复选框的值不为true

时间:2012-05-09 10:42:36

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

我有一个非常奇怪的情况,我从一个复选框向我的控制器发布一个值,即使在选中时也不是这样!

我的viewModel的一部分:

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

BUT!当我检查它时:

BeslutIStort.Ok=&BeslutIStort.Ok=false

在字符串中有两次,第一次没有值,oterh是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参数定义如下:

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

我希望有人能帮助我解释一下这个问题,并帮助我对我的控制器说“真实”: - )

=== S O L V E D === 当它结束时,我有这样的javascript:

$( “rensa。 ”)VAL(“。”);

这使得复选框无法正常运行。我补充说:

$(“。rensaCheckbox”)。attr(“checked”,false);

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

1 个答案:

答案 0 :(得分:1)

它也不奇怪...... 首先,你已经两次收到价值BeslutIStort.Ok=&BeslutIStort.Ok=false 因为当您使用@Html.CheckboxFor()时,Razor引擎会自动在表单中放置一个名称和值为false的隐藏字段 这样做是为了即使未选中复选框,也会返回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>