如何禁用TextAreaFor?

时间:2016-02-08 11:20:00

标签: asp.net-mvc-4

如何禁用文本在mvc中。我正在使用mvc 4.0。下面是我的代码,我想条件意味着如果m.Changes值长度> 0然后它应该被禁用,否则它被启用。 怎么可能?

@Html.TextAreaFor(m => m.Changes , new { style = " width:97%; height:50px;", tabindex = 5 }) 

2 个答案:

答案 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"属性。