Я написал собственный 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 - который объясняет, почему это не работает, но тот факт, что он вызывается в этом порядке, не имеет смысла.
Может кто-нибудь объяснить это?или как добиться того, чего я пытаюсь достичь?