我在我的模型中的布尔属性。 渲染视图时它的值是假的。 但是,当我提交表单,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。
我究竟做错了什么?
尝试
function GetFilterCriteria() {
var Criteria = {};
$('#frmCriteria input').each(function () {
Criteria[this.name] = false;
if ($("#" + this.name).is(':checked'))
Criteria[this.name] = true;
});
return Criteria;
};
感谢所有的提示......到底还要更复杂一些,由于剃刀的复选框创建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;
};
我不喜欢它,因为如果我想有一个隐藏的输入,这将跳过。 但现在它的工作原理。 我觉得很难相信,它必须是这个困难:(
您可以尝试使用.CheckBoxFor()
你只会得到一个input元素。
对于检查属性,您可以使用:
$('#CurrentMailTemplateEnabled').get()[0].checked
首先,把DOM元素来获取值。 至少,这为我工作。