在客户端将 MVC 复选框设置为只读(或禁用)

Run*_*ors 2 html checkbox asp.net-mvc jquery readonly

我们有几个 MVC 复选框,例如:

@Html.CheckBoxFor(model => model.hasData, …)
Run Code Online (Sandbox Code Playgroud)

我们有条件客户端代码,需要将 div 中的所有控件设置为只读(包括这些复选框):

if (someCondition) {
    $('#' + divIdToDisable + ' input').attr('readonly', 'true');
}
Run Code Online (Sandbox Code Playgroud)

我们了解到 readonly 在复选框上不能正常工作(见下文)。

我尝试了以下操作,但这会导致在“保存”期间没有数据回传(另请参见下文):

 $('#' + divIdToDisable + ' input').attr('disabled', 'true');
Run Code Online (Sandbox Code Playgroud)

这似乎是一个常见问题,但是在我所有的研究中,我还没有找到一个好的客户端解决方案。


这是我的研究:

复选框上的只读并不总是适用于所有浏览器:

HTML 复选框可以设置为只读吗?

如何将复选框设为只读?没被禁用?

在 MVC 中使用 'disabled' 会导致没有值被回发:

如果禁用,Html.CheckBox 返回 false,即使已选择

http://davecallan.com/posting-disabled-checkboxes-mvc-razor-views/

可以在剃刀代码中实现条件“禁用” :

Asp .net mvc 3 CheckBoxFor 方法输出隐藏字段,当复选框被选中为 true 时,该隐藏字段值为 false

MVC 3:使用 HtmlHelpers 有条件地添加禁用属性

然而,这些不是客户端解决方案。

ZiN*_*NED 5

如果您希望将禁用复选框中的数据发送到服务器,只需将它们的状态设置为发布enabled之前。因此,在 jQuery 中,您可以执行以下操作:

$("form").on("submit", function(e)
{
    $("input:checkbox").prop("disabled", false);
});
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

5407 次

最近记录:

9 年,1 月 前