如何获取动态/通用@Html.DisplayNameFor(o=>;o.myProperty)

本文关键字:gt myProperty DisplayNameFor 通用 何获取 获取 动态 @Html | 更新日期: 2023-09-27 18:25:41

我尝试在不直接使用模型视图的情况下使用DisplayNameFor,但使用了类型为Expression<Func<TModel, TValue>> 的变量

我认为使用以下功能可以解决

    //based on http://stackoverflow.com/questions/16208214/construct-lambdaexpression-for-nested-property-from-string
    public static LambdaExpression createExpression(Type type, string propertyName)
    {
        var param = Expression.Parameter(type, "x");
        Expression body = param;
        foreach (var member in propertyName.Split('.'))
        {
            body = Expression.PropertyOrField(body, member);
        }
        return Expression.Lambda(body, param);
    }

但是没有。。。当我像一样在我的视图中使用时

    @ {
      Model1 model1 = new Model1() { id = 1, code = "Code1", isActive = true, name = "Name1" };
      System.Linq.Expressions.LambdaExpression exp = Utils.createExpression(model1.GetType(), "id");
    }
    @Html.DisplayNameFor(exp)

编辑:它抛出一个CS0411编译错误

有什么想法吗?

如何获取动态/通用@Html.DisplayNameFor(o=>;o.myProperty)

尝试

public static LambdaExpression CreateExpression(Type type, string propertyName)
{
    ParameterExpression parameter = Expression.Parameter(type, "x");
    MemberExpression propertyAccess = Expression.Property(parameter, propertyName);
    return Expression.Lambda(propertyAccess, parameter);
}