Как получить динамический / универсальный @ Html.DisplayNameFor (o => o.myProperty)

1

Я попытался использовать DisplayNameFor без прямого использования Model View, но используя переменную типа 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)

edit: он выдает ошибку компиляции CS0411

Есть идеи?

  • 0
    Я отредактировал ваш заголовок. Пожалуйста, смотрите: « Должны ли вопросы включать« теги »в их заголовки? », Где консенсус «нет, они не должны».
  • 0
    Можете ли вы предоставить сообщение об ошибке?
Показать ещё 5 комментариев
Теги:
asp.net-mvc
html-helper

1 ответ

0

Пытаться

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);
}
  • 0
    Я получил ту же ошибку компиляции в строке @ Html.DisplayNameFor (exp), объясняющую, что подпись не совпадает с System.Web.Mvc.HtmlHelper <TModel>, System.Linq.Expressions.Expression <System.Func <TModel, TValue >>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню