Получить пользовательские атрибуты из выражения лямбда-свойства

Я использую ASP.NET MVC 2 Preview 2 и написал собственный метод расширения HtmlHelper для создания метки с помощью выражения. TModel относится к простому классу со свойствами, и свойства могут иметь атрибуты для определения требований проверки. Я пытаюсь выяснить, существует ли определенный атрибут в свойстве, которое выражение представляет в моем методе метки.

Код для класса и метки:

public class MyViewModel
{
    [Required]
    public string MyProperty { get; set; }
}

public static MvcHtmlString Label<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string label)
{
    return MvcHtmlString.Create(string.Concat("<label for=\"", expression.GetInputName(), "\">", label, "</label>"));
}

public static string GetInputName<TModel, TProperty>(this Expression<Func<TModel, TProperty>> expression)
{
    return expression.Body.ToString().Substring(expression.Parameters[0].Name.Length + 1);
}

Тогда я бы назвал этикетку так:

Html.Label(x => x.MyProperty, "My Label")

Есть ли способ узнать, имеет ли свойство в значении выражения, переданном метке Label, атрибут Required?

Я понял, что выполнение следующего действительно дает мне атрибут, если он существует, но я надеюсь, что есть более чистый способ сделать это.

public static MvcHtmlString Label<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string label)
{
    System.Attribute.GetCustomAttribute(Expression.Property(Expression.Parameter(expression.Parameters[0].Type, expression.GetInputName()), expression.GetInputName()).Member, typeof(RequiredAttribute))

    return MvcHtmlString.Create(string.Concat("<label for=\"", expression.GetInputName(), "\">", label, "</label>"));
}

Ответы на вопрос(2)

Ваш ответ на вопрос