如何禁用文本在mvc中。我正在使用mvc 4.0。下面是我的代码,我想条件意味着如果m.Changes值长度> 0然后它应该被禁用,否则它被启用。 怎么可能?
@Html.TextAreaFor(m => m.Changes , new { style = " width:97%; height:50px;", tabindex = 5 })
答案 0 :(得分:3)
只有使用JavaScript才能进行条件禁用。首先,您需要设置一个id:
@Html.TextAreaFor(m => m.Changes , new { style = " width:97%; height:50px;", tabindex = 5, id = "someId" })
假设您使用jQuery:
$('#someId').on('keyUp', function() {
var text = $('#someId').val();
if (text.length > 0)
$('#someId').attr('disabled','disabled');
});
但是,我想注意,当内容的长度大于零时禁用某些文本框,也就是说有任何内容,这是没有意义的,因为禁用它将阻止您再次修改它(除非有一些逻辑,根据某些条件以编程方式重新启用它)。
如果您的目标是在服务器上的值的长度大于零时禁用控件(即Changes
属性不为null且为非空模型中的值),然后你可以这样做:
@if (Model.Changes.Length > 0) {
@Html.TextAreaFor(m => m.Changes , new { style = " width:97%; height:50px;", tabindex = 5, id = "someId", disabled = "disabled" })
} else {
@Html.TextAreaFor(m => m.Changes , new { style = " width:97%; height:50px;", tabindex = 5, id = "someId" })
}
如果你需要根据客户端条件禁用它,那么你就不能避免写一个scipt来做到这一点。
答案 1 :(得分:1)
这不是一件容易的事,因为disabled
属性的 presence 已经禁用了该元素,无论该属性是否实际具有值。
所以你不能这样做:
new { disabled = Model.Changes.Length == 0 }
您可以编写支持此功能的扩展方法,如Set disable attribute based on a condition for Html.TextBoxFor所示。此扩展方法具有bool disabled
参数,如果为true,则会插入正确的disabled="disabled"
属性。