MVC 根据值禁用 EditFor()

MVC disable EditFor() based on value

我正在使用 MVC 4

我的 *.ascx 页面中有以下内容以在页面上显示文本框:

<div class="editor-field inner">
       <%: Html.EditorFor(model => model.Number) %>
</div>

我的模型有一个 bool 属性 allowEdit 指示是否应该允许用户编辑某条信息。当该值为 false 时,我仍想显示文本框但禁用它。

我试过使用 jquery 如下:

<script type="text/javascript">
    $(document).ready(function () {
        var myModel = '<%=Model.allowEdit%>';

        if(myModel == false)
        {
            alert("HELLO");
        }
        });
</script>

如何根据模型值动态 enable/disable 某些文本框?

首先,我要说的是,您不仅需要在客户端上进行验证,还需要在服务器上进行验证。由于客户端可以绕过 javascript,或者手动提交值来绕过它。

话虽如此,如果您使用的是 MVC5.1 或更高版本,您可以简单地执行以下操作:

<%: Html.EditorFor(model => model.Number, new { htmlAttributes = 
   Model.allowEdit ? (object)new {} : new { disabled = "disabled" }}) %>

此外,请注意禁用的控件不会 post 将它们的值返回给服务器,因此请确保您的 post 处理程序不需要该值。您可以将上面的 disabled 替换为 readonly 以使用 readonly 属性。

编辑:

如果您不能使用 MVC5.1 或更高版本,那么您有两个选择。要么创建一个自定义的 EditorTemplate,这可能比它值得的工作更多。或者只使用 TextBoxFor 代替。您可以将语法稍微更改为:

<%: Html.TextBoxFor(model => model.Number, 
        Model.allowEdit ? (object)new {} : new { disabled = "disabled" }) %>