MVC 4 EditorFor布尔复选框总是张贴真(MVC 4 EditorFor bool Che

2019-09-27 15:26发布

我在我的模型中的布尔属性。 渲染视图时它的值是假的。 但是,当我提交表单,TRUE值被传递给控制器​​。 我使用的是自定义的JS函数来获取从表单中的值提交到一个控制器的动作。 我不知道如何从复选框正确的值。

我的模型属性:

public bool RushOrderFlag { get; set; }

视图标记:

@Html.EditorFor(model => model.RushOrderFlag)

该HTML渲染:

<input class="chkbx" data-val="true" data-val-required="The Rush? field is required." id="RushOrderFlag" name="RushOrderFlag" type="checkbox" value="true">
<input name="RushOrderFlag" type="hidden" value="false">

我的JS功能

function GetFilterCriteria() {
var Criteria = {};
$('#frmCriteria input').each(function () {
    Criteria[this.name] = $("#" + this.name).val();
});
return Criteria;
};

即使在控制台我把$(“[NAME =‘RushOrderFlag’]”)。VAL(),点击复选框开启和关闭后,它总是返回true。

我究竟做错了什么?

Answer 1:

尝试

function GetFilterCriteria() {
var Criteria = {};
$('#frmCriteria input').each(function () {
    Criteria[this.name] = false;
    if ($("#" + this.name).is(':checked'))
        Criteria[this.name] = true;

});
return Criteria;
};


Answer 2:

感谢所有的提示......到底还要更复杂一些,由于剃刀的复选框创建2个输入控件的方式。 所以这是我必须做的:

function GetFilterCriteria() {
var Criteria = {};
$('#frmCriteria input').each(function () {
    if ($(this).attr('type') != 'hidden') {
        if ($(this).attr('type') == 'checkbox') {
            Criteria[this.name] = this.checked;
        } else {
            Criteria[this.name] = $("#" + this.name).val();
        }
    }
});
return Criteria;
};

我不喜欢它,因为如果我想有一个隐藏的输入,这将跳过。 但现在它的工作原理。 我觉得很难相信,它必须是这个困难:(



Answer 3:

您可以尝试使用.CheckBoxFor()你只会得到一个input元素。

对于检查属性,您可以使用:

$('#CurrentMailTemplateEnabled').get()[0].checked 

首先,把DOM元素来获取值。 至少,这为我工作。



文章来源: MVC 4 EditorFor bool Checkbox always posting True