MVC根据值禁用EditorFor()

时间:2015-01-28 19:44:37

标签: c# jquery asp.net-mvc

我正在使用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>

如何根据模型值动态启用/禁用某些文本框?

1 个答案:

答案 0 :(得分:3)

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

话虽如此,如果您使用的是MVC5.1或更高版本,您可以这样做:

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

另外,请注意禁用的控件不会将其值发布回服务器,因此请确保您的帖子处理程序不会期望该值。您可以使用readonly replace替换disabled,而不是使用readonly属性。

编辑:

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

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