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

Asp.net mvc 如何在编辑器模板中测试[AllowHtml]属性?,asp.net-mvc,data-annotations,mvc-editor-templates,Asp.net Mvc,Data Annotations,Mvc Editor Templates,我希望能够在编辑器模板中测试[AllowHtml]属性的属性 它似乎没有潜伏在ViewData.ModelMetadata中 我尝试了遍历ViewData.ModelMetadata.AdditionalValues以查看它是否在那里,但似乎不在那里 我搜索了谷歌和谷歌,但我在任何地方都找不到答案 我相信您必须在模板中执行一些繁重的操作,如: var allowHtmlAttribute = this.ViewData.ModelMetadata .ContainerType .GetP

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

它似乎没有潜伏在
ViewData.ModelMetadata

我尝试了遍历
ViewData.ModelMetadata.AdditionalValues
以查看它是否在那里,但似乎不在那里


我搜索了谷歌和谷歌,但我在任何地方都找不到答案

我相信您必须在模板中执行一些繁重的操作,如:

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;
  } 
}
公共静态类ModelMetadataExtensions
{
公共T GetPropertyAttribute(此ModelMetadata实例)
其中T:Attribute
{
var result=instance.ContainerType
.GetProperty(实例.PropertyName)
.GetCustomAttributes(typeof(T),false)
.选择(a=>a作为T)
.FirstOrDefault(a=>a!=null);
返回结果;
} 
}
然后

var myAttribute=this.ViewData.ModelMetadata
.GetPropertyAttribute();

你的最后一个答案让我开始深入研究这个问题!感谢您在一天内给出了两个精彩的答案。:)我实现了扩展。
Select(a=>a as T)
行给了我一个错误。类型参数T不能与as运算符一起使用,因为它没有类类型约束。我在定义中添加了
where T:Attribute
,从而消除了错误,但这完全是猜测,可能有更好的方法来解决它。
var myAttribute = this.ViewData.ModelMetadata
  .GetPropertyAttribute<AllowHtmlAttribute>();