我正在使用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>
如何根据模型值动态启用/禁用某些文本框?
答案 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" }) %>