只是为了结束这个老问题,我将介绍我解决它的方式。
我不得不重载“TextBoxFor”、“CheckBoxFor”(等等),在方法的末尾添加一个用于 readOnly/disabled 的布尔参数。下面的例子:
//Overload TextBoxFor with a "disabled" parameter. For use with readonly-roles
public static IHtmlString TextBoxForRo<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes, bool disabled)
{
var attributes = new RouteValueDictionary();
if (htmlAttributes != null)
{
foreach (System.ComponentModel.PropertyDescriptor property in System.ComponentModel.TypeDescriptor.GetProperties(htmlAttributes))
{
attributes.Add(property.Name.Replace('_', '-'), property.GetValue(htmlAttributes));
}
}
if (disabled)
{
attributes["disabled"] = "disabled";
}
return htmlHelper.TextBoxFor(expression, attributes);
}
我必须为每种类型或表单输入执行此操作,显然我必须替换视图中的很多调用。它虽然有效,但这是我能想到的最好的解决方案。