0

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

我的视图模型的一部分:

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 参数定义如下:

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

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

===已解决===事实证明,我有这样的javascript:

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

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

$(".rensaCheckbox").attr("选中", false);

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

4

1 回答 1

1

它也不是那么奇怪..
首先你已经收到了两次值,BeslutIStort.Ok=&BeslutIStort.Ok=false 因为 Razor 引擎会自动在表单中放置一个具有相同名称和值 false 的隐藏字段,当你使用@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>
于 2012-05-09T12:34:09.010 回答