首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从lambda表达式中提取自定义属性值?

如何从lambda表达式中提取自定义属性值?
EN

Stack Overflow用户
提问于 2021-07-03 00:38:00
回答 1查看 36关注 0票数 0

我有以下类定义

Person.cs

代码语言:javascript
复制
class Person {

  [Column("first_name")]
  public string FirstName { get; set; }

  [Column("last_name")]
  public string LastName { get; set; }
}

我编写了一个HTML Helper扩展来从给定实例中提取ColumnAttribute值。然而,它并不像我期望的那样工作。

这是我尝试过的:

Index.cshtml

代码语言:javascript
复制
@model Person
<p>ColumnName is @Html.ColumnNameFor( model => model.FirstName )</p>

HtmlExtensions.cs (公共静态类)

代码语言:javascript
复制
public static string ColumnNameFor<T, P>(this HtmlHelper<T> helper, Expression<Func<T, P>> expression)
{
    var name = ExpressionHelper.GetExpressionText(expression);
    var metadata = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);

    // this line causes a runtime error:
    //  Sequence contains no elements
    var attr = (ColumnAttribute)metadata.GetType().GetCustomAttributes(typeof(ColumnAttribute), false).First();
            
  return attr.Name;    // ColumnAttribute stores the value in .Name
}

根据记录,我可以使用GetCustomAttributes提取值,前提是我传递了对该属性的引用,我认为这将使视图中的代码看起来与Html.TextBoxForHtml.DisplayFor等的内置ASP代码非常不同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-04 01:37:24

感谢@benuto的回答,我能够了解如何使用MemeberExpress提取任何所需的自定义属性或属性。我想要帮助别人的答案,所以我做了一个有效的例子。请记住,您需要检查对象是否具有自定义属性,以避免在访问FirstOrDefault().Name时崩溃。

代码语言:javascript
复制
 public static string ColumnNameFor<T, P>( this HtmlHelper<T> helper, 
                                           Expression<Func<T, P>> expression)
 {
      var name = ExpressionHelper.GetExpressionText(expression);

      MemberExpression me = expression.Body as MemberExpression;

      var cp = (ColumnAttribute)me
                  .Member
                  .GetCustomAttributes(typeof(ColumnAttribute), false)
                  .FirstOrDefault();

      return (cp == null) ? null : cp.Name;
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68228703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档