基于属性名

时间:2017-09-28 22:37:47

标签: c# asp.net-mvc razor lambda

我有一个模型,上面有几个属性。我需要为每个属性生成表单字段。大部分代码都是锅炉板,我试图制作一个剃刀部分或帮助器,这将消除重新键入逻辑的需要。

鉴于以下剃刀:

@Html.TextBoxFor(x => x.FirstName)

我希望能够做到这样的事情,但通过传递属性的名称:"FirstName"

我创建了一个Razor扩展方法,试图这样做:

public static class RazorExtensions
{
    public static LambdaExpression GetExpressionForField(Type type, string propertyName)
    {
        var parameter = Expression.Parameter(type, "x");
        var propertyExpression = Expression.PropertyOrField(parameter, propertyName);
        var exp = Expression.Lambda(propertyExpression, parameter);

        return exp;
    }
}

用法是:

@{
    var expression = RazorExtensions.GetExpressionForField(Model.GetType(), "FirstName");
}

@Html.TextBoxFor(expression)

执行此操作时,收到编译错误:

CS0411:方法' System.Web.Mvc.Html.DisplayNameExtensions.DisplayNameFor(System.Web.Mvc.HtmlHelper,System.Linq.Expressions.Expression>)'的类型参数。无法从使用中推断出来。尝试明确指定类型参数。

为了能够显式输入表达式或解决此问题,我需要使用哪些方法/流程?

0 个答案:

没有答案