Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取动态/通用@Html.DisplayNameFor(o=>o.myProperty)_C#_Asp.net Mvc_Html Helper - Fatal编程技术网

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

C# 如何获取动态/通用@Html.DisplayNameFor(o=>o.myProperty),c#,asp.net-mvc,html-helper,C#,Asp.net Mvc,Html Helper,我尝试在不直接使用模型视图的情况下使用DisplayNameFor,但使用了Expression类型的变量 我认为使用下面的函数可以解决这个问题 //based on http://stackoverflow.com/questions/16208214/construct-lambdaexpression-for-nested-property-from-string public static LambdaExpression createExpression(Type ty

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

我认为使用下面的函数可以解决这个问题

    //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编译错误

有什么想法吗

试试看

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);
}

我在@Html.DisplayNameForexp行上遇到了相同的编译错误,原因是签名与System.Web.Mvc.htmlhelp、System.Linq.Expressions.expression不匹配。我已编辑了您的标题。请看,如果共识是否定的,他们不应该这样做。你能提供错误消息吗?是的,用法语,但你有错误代码:CS0411:Les arguments de type pour la méthode'System.Web.Mvc.Html.DisplayNameExtensions.DisplayNameForSystem.Web.Mvc.HtmlHelper,系统。Linq。表达式。表达式“使用一方的利益”。Essayez de spécifier les arguments de type de façon explicite.英文版:Error CS0411,方法'System.Web.Mvc.Html.DisplayNameExtensions.DisplayNameForSystem'的类型参数。‌​无法从使用中推断Web.Mvc.HtmlHelper、System.Linq.Expressions.Expression>。尝试显式指定类型参数如果您尝试调用泛型方法,如果您需要显式传递泛型参数,请尝试@Html.DisplayNameForexp之类的方法