我编写了一个自定义的 DataAnnotationsModelMetadataProvider 动态设置 HideSurroundingHtml。
public class ContentDrivenModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType,
Func<object> modelAccessor, Type modelType, string propertyName)
{
ModelMetadata metadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType,
propertyName);
metadata.HideSurroundingHtml = true;
}
}
但这似乎没有被编辑器模板接受。所以 Iv 为标签创建了一个新的 HTML 扩展方法,试图强制 HideSurroundingHtml 工作。
public static class HtmlCustom
{
public static MvcHtmlString CustomLabelFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression)
{
if(htmlHelper.ViewData.ModelMetadata.HideSurroundingHtml)
{
return MvcHtmlString.Empty;
}
return htmlHelper.LabelFor(expression);
}
}
但这不起作用,此外,当我将断点附加到这些时,它似乎在 CreateMetadata 方法之前命中了扩展方法 - 这解释了为什么这不起作用,但按此顺序调用它的事实没有意义。
任何人都可以解释这一点吗?或者如何实现我想要实现的目标?