J'ai écrit un DataAnnotationsModelMetadataProvider personnalisé qui définit HideSurroundingHtml dynamiquement.Solution à metadata.HideSurroundingHtml ne fonctionne pas
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;
}
}
Mais cela ne semble pas être pris en compte par les modèles d'éditeur. Donc Iv a créé une nouvelle méthode d'extension HTML pour l'étiquette qui essaie de forcer HideSurroundingHtml à fonctionner.
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);
}
}
Mais cela ne travaille pas, par ailleurs, quand j'attachais points de rupture à ceux-ci, il semble frapper la méthode d'extension avant que la méthode CreateMetadata - ce qui explique pourquoi cela ne fonctionne pas, mais le fait cela, il est appelé à cet ordre n'a pas de sens.
Quelqu'un peut-il expliquer cela? ou comment réaliser ce que j'essaie de réaliser?
Ceci est un article plus ancien, mais avez-vous pensé à joindre votre fournisseur de métadonnées personnalisé? Vous aurez besoin de quelque chose comme ça dans votre méthode 'Application_Start':' ModelMetadataProviders.Current == new ToolboxModelMetadataProvider() '. Vous ne mentionnez pas si vous pouvez vérifier que votre fournisseur de métadonnées personnalisé est effectivement appelé. – TLS