我们实际上只是遇到了同样的问题。我们最终实现了一个带有重载参数的扩展方法,它接受一个布尔值,指示我们是否要禁用控件。我们只是在适当的时候添加“禁用”属性,让内置的 HtmlHelper 处理繁重的工作。
扩展类和方法:
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Web.Mvc;
using System.Web.Mvc.Html;
using System.Web.Routing;
public static class OurHtmlHelpers
{
public const string DisabledAttribute = "disabled";
public static MvcHtmlString TextBoxFor<TModel, TProp>(this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProp>> expression,
object htmlAttributes,
bool canEdit)
{
var htmlAttributeDictionary = SetDisabledAttribute(htmlAttributes, canEdit);
return htmlHelper.TextBoxFor(expression, htmlAttributeDictionary);
}
private static RouteValueDictionary SetDisabledAttribute(object htmlAttributes, bool canEdit)
{
var htmlAttributeDictionary = new RouteValueDictionary(htmlAttributes);
if (!canEdit)
{
htmlAttributeDictionary.Add(DisabledAttribute, DisabledAttribute);
}
return htmlAttributeDictionary;
}
}
然后你只需要引用你的新类并调用@Html.TextBoxFor(m => m.SomeValue, new { @class = "someClass" }, <Your bool value>)
值得注意的是,您必须为您想使用的任何 TextBoxFor 重载定义这些扩展,但这似乎是一个合理的权衡。您还可以将大部分相同的代码用于您想要添加功能的其他 HtmlHelper。