Asp.net mvc 在mvc中禁用复选框不会向数据库提交值

Asp.net mvc 在mvc中禁用复选框不会向数据库提交值,asp.net-mvc,checkbox,html-helper,mvc-editor-templates,Asp.net Mvc,Checkbox,Html Helper,Mvc Editor Templates,如果复选框被禁用,该值是否不会提交到数据库?我禁用了一个复选框,这样即使用户没有在表单的其余部分输入任何值,也至少会提交一个值。但是当我点击submit按钮时,数据库中没有条目。请帮忙 <table class="table-bordered"> <tr> <td colspan="2"> @Html.CheckBoxFor(m => m.isUsed, new { @disabled="disabled"}) </

如果复选框被禁用,该值是否不会提交到数据库?我禁用了一个复选框,这样即使用户没有在表单的其余部分输入任何值,也至少会提交一个值。但是当我点击submit按钮时,数据库中没有条目。请帮忙

<table class="table-bordered">
<tr>
    <td colspan="2">
        @Html.CheckBoxFor(m => m.isUsed, new { @disabled="disabled"})
    </td>
</tr>
<tr>
    <td>
         @Html.TextBoxFor(m => m.FirstName, @Model.isUsed ? (object)new { @class = "form-control" } : new { @class = "form-control", @disabled = "disabled" })
        @Html.ValidationMessageFor(m => m.FirstName)
    </td>
</tr>

@CheckBoxFor(m=>m.isUsed,新的{@disabled=“disabled”})
@Html.TextBoxFor(m=>m.FirstName,@Model.isUsed?(object)new{@class=“form control”}:new{@class=“form control”,@disabled=“disabled”})
@Html.ValidationMessageFor(m=>m.FirstName)

它不会从禁用的元素中提交/拾取值。这里可以做的是添加一个强类型隐藏字段,该字段将保存属性的值。模型活页夹将完成其余工作,即

@Html.HiddenFor(m => m.isUsed)
// instead of..
@Html.CheckBoxFor(m => m.isUsed, new { @disabled="disabled"})

这样,在提交表单时,
Model.isUsed
将具有其值。

您必须在提交表单之前删除“disabled”属性。 假设您的表单id为“TestForm”,那么

$('#TestForm').submit(function() {
        $('#CheckBoxId').removeAttr('disabled');
    });

另一种在不增加前端页面额外开销的情况下处理此问题的方法是对相应的后端参数使用默认值false/0。这样一来,你就不在乎值是否已发布(当然取决于你的应用程序架构)


i、 e.如果未选中(因此未发布),则在后端将以false结束。如果已选中并已发布,则会覆盖后端的false/0值。

该值应存储在数据库中。请检查服务器端操作中发生了什么。模型是否具有值。禁用的表单控件不会发布值。在您的情况下,由于
CheckBoxFor()
TextBoxFor()中的条件语句生成了相关的隐藏输入,因此始终会发布值
false
方法生成完全相同的html属性,因此不清楚它的用途。@StephenMuecke我只想隐藏或禁用该复选框,以便用户无法取消选中该复选框。当复选框未选中时,texbox将被禁用,并且将为FirstName提交一个空白值。最初,TextBoxFor()方法看起来像这样
@Html.TextBoxFor(m=>m.FirstName,@Model.isUsed?(object)new{@class=“form control”}:new{@class=“form control”,@disabled=“disabled”})
您应该编辑问题以显示
TextBoxFor()方法的真实代码。只要包含
@Html.HiddenFor(m=>m.isUsed)
就可以了,如果你真的需要显示一个复选框,即使
isUsed
true
,它也会一直回发false,因为
CheckBoxFor()
方法会生成一个带有
value=“false”的隐藏输入,当然会的。我想OP要求总是将值保存在DB中。我的错。我应该要求进一步澄清。@Rohit416我删除了复选框,而只保留了HiddenFor()方法。它现在可以正常工作了。