如何为反射属性生成表达式
本文关键字:表达式 属性 反射 | 更新日期: 2023-09-27 18:36:54
我用这个签名构建了一个MVC Html助手:
public static MvcHtmlString EditFieldFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, object additionalViewData = null)
我正在尝试构建另一个帮助程序,该帮助程序将反映对象的属性,然后为每个反射的属性调用 EditFieldFor。但如您所见,该方法需要一个表达式。
如何将属性信息转换为表达式?
这个答案告诉我该怎么做。这是我所做的:
foreach (var propertyInfo in editFields)
{
var expParam = Expression.Parameter(typeof(TModel)); // TModel is a generic parameter on this method
var expProp = Expression.Property(expParam, propertyInfo);
var expression = Expression.Lambda(expProp, expParam);
var fieldHtml = (MvcHtmlString)typeof (HtmlHelpers)
.GetMethod("EditFieldFor")
.MakeGenericMethod(typeof (TModel), propertyInfo.PropertyType)
.Invoke(null, new object[] {html, expression, null});
editFormHtml.Append(fieldHtml);
}