代码之家  ›  专栏  ›  技术社区  ›  Dan TheCodeJunkie

metadata.hidesurringhtml不工作的解决方案

  •  1
  • Dan TheCodeJunkie  · 技术社区  · 15 年前

    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;
            }
    
    }
    

    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方法之前命中了extension方法-这解释了为什么它不起作用,但是按此顺序调用它的事实没有意义。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Dan TheCodeJunkie    15 年前

    以下是操作方法:

    public static MvcHtmlString CustomLabelFor<TModel, TProperty>(
                     this HtmlHelper<TModel> htmlHelper,
                     Expression<Func<TModel, TProperty>> expression)
            {
                var propertyName = ExpressionHelper.GetExpressionText(expression);
                var htmlString = htmlHelper.LabelFor(expression);
    
                ModelMetadata modelMetaData = htmlHelper.ViewData.ModelMetadata.Properties.Where(x => x.PropertyName == propertyName).First();
    
                if (modelMetaData.HideSurroundingHtml)
                {
                    htmlString = MvcHtmlString.Empty;
                }
                return htmlString;
            }
    

    推荐文章