MVC 4 EditorFor bool Checkbox总是发布True

时间:2013-02-15 01:35:55

标签: javascript asp.net-mvc razor

我的模型中有bool属性。渲染视图时,其值为false。但是当我提交表单时,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。

我做错了什么?

3 个答案:

答案 0 :(得分:0)

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

});
return Criteria;
};

答案 1 :(得分:0)

感谢大家提示......最后由于剃刀为复选框创建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;
};

我不喜欢它,因为如果我想要一个隐藏的输入,这将跳过它。但是现在它有效。我发现很难相信它必须是这么困难:(

答案 2 :(得分:0)

您可以尝试使用.CheckBoxFor(),只会获得一个输入元素。

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

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

通过首先获取DOM元素来获取值。至少那对我有用。