希望对你来说这是一个简单的问题asp.net mvc gurus:
我有一个复选框,创建如下:
<%=Html.CheckBox("MyCheckBox", true, new { disabled = "disabled"})%>
在我的行动中,我正在检查价值:
bool isChecked = form["MyCheckBox"].Contains("true");
我希望这会返回true,因为它已被检查。但是,创建的隐藏元素具有错误值:
<input checked="checked" disabled="disabled" id="MyCheckBox" name="MyCheckBox" type="checkbox" value="true" />
<input name="MyCheckBox" type="hidden" value="false" />
首先,有没有办法让HtmlHelper按照我的预期行事?或者是手动构建输入/创建自己的帮助方法的唯一方法? (这不是一个大问题......)
其次,任何人都可以了解复选框为何如此表现?假设一个勾选的禁用复选框应该== true,我是不正确的?禁用状态在语义上是否意味着错误?
答案 0 :(得分:32)
标有disabled="disabled"
属性 NEVER 的输入字段将其值发送到服务器。如果要实现此目的,可以使用readonly="readonly"
属性,该属性仍然阻止用户修改值,但在提交表单时发送现有值。
答案 1 :(得分:2)
1)从我的角度来看,无法改变Html.CheckBox方法的行为。我不得不面对这个问题,我最后按照你的建议手动构建输入复选框。构造输入复选框并不总是很糟糕,因为使用辅助方法并不总是eaven。当然,对你自己的帮助方法进行自我选择可能是正确的选择。
2)提交表单时未发布已禁用的输入字段; 我希望相同,提交已禁用的输入复选框文件,是否已选中。
当没有选中复选框时,我们可以争论选择在中继输入隐藏字段以便推入请求复选框。这个选择的副作用是,即使复选框已禁用,我们也会在发布的数据中找到复选框名称,与上述内容不一致:表单时未发布禁用的输入字段提交
答案 2 :(得分:2)
我不知道它是否可以解决您的问题,但这对我来说是解决方案:
我的模型具有UserMigrated布尔属性,一旦用户设置为迁移,他就无法返回,因此视图变为:
@if (Model.UserMigrated)
{
<td>@Html.CheckBox("chkBoxReadOnly", true, new {disabled = "disabled"})</td>
@Html.HiddenFor(m => m.UserMigrated)
}
else
{
<td>@Html.CheckBoxFor(m => m.UserMigrated)</td>
}
答案 3 :(得分:0)
当尝试使用禁用复选框时,我遇到了类似的问题。 我的解决方案是不显示复选框,因为用户无权修改该字段。
我还确保Html.HiddenFor在那里,因此保留了该值。
答案 4 :(得分:0)
在复选框之前添加“隐藏”字段对我有用。 请注意,只有在禁用该字段的情况下,我才添加隐藏字段。
贷方转到this post
@{
if (Model.MyFieldDisabled)
{
@Html.HiddenFor(x => x.MyField)
}
}
@Html.CheckBoxFor(x => x.MyField, new {disabled = "disabled"})
答案 5 :(得分:0)
在我下面的情况下,它与 asp-tag 助手有关。所以为了发送值,我使用了输入隐藏字段并且它起作用了。
<input type="checkbox" asp-for="@Model.SomeList[i].Selected" disabled />
<input type="hidden" asp-for="@Model.SomeList[i].Selected" />
HTH 给别人 :)
答案 6 :(得分:0)
@(Model.IsClosed ? "Yes" : "No")
@Html.HiddenFor(m => m.IsClosed)
这在所有情况下都对我有用。无需禁用和只读