如何在编辑器模板中测试[AllowHtml]属性?

时间:2015-05-05 18:19:32

标签: asp.net-mvc data-annotations mvc-editor-templates

我希望能够在编辑器模板中测试[AllowHtml]属性的属性。

ViewData.ModelMetadata内似乎没有潜伏。

我已经尝试遍历ViewData.ModelMetadata.AdditionalValues以查看它是否存在,但似乎并非如此。

我已经搜索了Google和Brad Wilson's post on templates,但我无法在任何地方找到答案。

1 个答案:

答案 0 :(得分:1)

我相信你必须在模板中做一些繁重的工作,如:

var allowHtmlAttribute = this.ViewData.ModelMetadata
  .ContainerType
  .GetProperty(this.ViewData.ModelMetadata.PropertyName)
  .GetCustomAttributes(typeof(AllowHtmlAttribute), false)
  .Select(a => a as AllowHtmlAttribute)
  .FirstOrDefault(a => a != null);

现在我考虑一下,扩展方法会很棒!

public static class ModelMetadataExtensions
{
  public T GetPropertyAttribute<T>(this ModelMetadata instance)
    where T : Attribute
  {
    var result = instance.ContainerType
      .GetProperty(instance.PropertyName)
      .GetCustomAttributes(typeof(T), false)
      .Select(a => a as T)
      .FirstOrDefault(a => a != null);

    return result;
  } 
}

然后

var myAttribute = this.ViewData.ModelMetadata
  .GetPropertyAttribute<AllowHtmlAttribute>();