Asp.net mvc 4 如何禁用TextArea for?

Asp.net mvc 4 如何禁用TextArea for?,asp.net-mvc-4,Asp.net Mvc 4,如何在mvc中禁用文本。我正在使用MVC4.0。下面是我的代码,我想有条件地表示,如果m.Changes values length>0,那么它应该被禁用,否则它将被启用。 这怎么可能 @Html.TextAreaFor(m => m.Changes , new { style = " width:97%; height:50px;", tabindex = 5 }) 条件禁用只能通过使用JavaScript实现。首先,您需要设置一个id: @Html.TextAreaFor(m =&

如何在mvc中禁用文本。我正在使用MVC4.0。下面是我的代码,我想有条件地表示,如果m.Changes values length>0,那么它应该被禁用,否则它将被启用。 这怎么可能

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

条件禁用只能通过使用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来执行此操作。

这不是一件小事,因为无论该属性是否实际具有值,
disabled
属性的存在都将禁用该元素

所以你不能这样做:

new { disabled = Model.Changes.Length == 0 } 

您可以编写支持此功能的扩展方法,如中所示。此扩展方法有一个
bool disabled
参数,如果该参数为true,将插入正确的
disabled=“disabled”
属性。

@balazs-是否有任何方法不为其编写脚本就可以执行此操作。只有使用类似于我设置为style=“width:97%”这样的属性…您可以根据,但您确实意识到禁用的控件不会回发值,因此模型绑定将失败?您只需将助手包装在
if..else
块中,并相应地包含或忽略
htmlAttributes
对象的disabled属性。如果你必须在很多地方做这样的事情,那么你的解决方案确实更好。是的,你不想复制粘贴你的
Html.TextAreaFor()
,这是一个维护地狱。