恐怕这是不可能的,至少不是简单的方法,因为 EditorFor 创建了许多 html 元素,因此不清楚 htmlAttributes 应该应用哪个元素。
但是,困难的方法是在 Views/Shared/EditorTemplates/Object.cshtml 中实现自己的 Object.cshtml。以下是自定义 Object.cshtml(特定于引导程序)的示例,您可以在其中从 ViewData 中获取值并以您喜欢的方式构造输出 Html。
@using MvcApplication1.Utility
@if (ViewData.TemplateInfo.TemplateDepth > 1) {
@ViewData.ModelMetadata.SimpleDisplayText
} else {
foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForDisplay && !ViewData.TemplateInfo.Visited(pm))) {
var htmlString = prop.IsReadOnly ? Html.Display(prop.PropertyName) : Html.Editor(prop.PropertyName);
if (prop.HideSurroundingHtml) {
@htmlString
}
else
{
var errors = Html.ValidationErrors(prop);
<div class="form-group @(prop.IsReadOnly ? "form-group-readonly" : "") @(errors.Any() ? "has-error has-feedback" : "")">
<label class="control-label" for="@ViewData.TemplateInfo.GetFullHtmlFieldId(prop.PropertyName)">@prop.GetDisplayName()</label>
@htmlString
@foreach (var err in errors)
{
<div class="field-validation-error">@err.ErrorMessage</div>
}
</div>
}
}
}
和效用函数
public static IEnumerable<ModelError> ValidationErrors<TModel>(this HtmlHelper<TModel> htmlHelper, ModelMetadata modelMetadata)
{
string modelName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(modelMetadata.PropertyName);
return ValidationErrors(htmlHelper, modelName);
}
public static IEnumerable<ModelError> ValidationErrors<TModel>(this HtmlHelper<TModel> htmlHelper)
{
return ValidationErrors(htmlHelper, String.Empty);
}
private static IEnumerable<ModelError> ValidationErrors(this HtmlHelper htmlHelper, String modelName)
{
FormContext formContext = htmlHelper.ViewContext.FormContext;
if (formContext == null)
yield break;
if (!htmlHelper.ViewData.ModelState.ContainsKey(modelName))
yield break;
ModelState modelState = htmlHelper.ViewData.ModelState[modelName];
if (modelState == null)
yield break;
ModelErrorCollection modelErrors = modelState.Errors;
if (modelErrors == null)
yield break;
foreach(var err in modelErrors)
yield return err;
}