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" }) %>
我正在使用 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" }) %>