我有一个模型,上面有几个属性。我需要为每个属性生成表单字段。大部分代码都是锅炉板,我试图制作一个剃刀部分或帮助器,这将消除重新键入逻辑的需要。
鉴于以下剃刀:
@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>)'的类型参数。无法从使用中推断出来。尝试明确指定类型参数。
为了能够显式输入表达式或解决此问题,我需要使用哪些方法/流程?