HideSurroundingHtml を動的に設定するカスタム DataAnnotationsModelMetadataProvider を作成しました。
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 は、HideSurroundingHtml を強制的に機能させようとする、ラベル用の新しい HTML 拡張メソッドを作成しました。
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 メソッドの前に拡張メソッドにヒットしたように見えます。これは、これが機能しない理由を説明していますが、この順序で呼び出されるという事実は意味がありません。
誰でもこれを説明できますか?または、私が達成しようとしていることを達成する方法は?