【发布时间】:2011-04-26 14:16:25
【问题描述】:
编写强类型 Html 帮助程序存在一个常见问题。 问题是如何检索属性名称/值对。 假设我们有以下 Html 助手声明:
public static string DatePickerFor<TModel>(this HtmlHelper<TModel> helper, Expression<Func<TModel, DateTime?>> expression)
我找到了几种解决方案: 1.
var value = expression.Compile()( helper.ViewData.Model );
string name = ExpressionHelper.GetExpressionText( expression );
string fullName = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName( name );
2.
ModelMetadata metadata = ModelMetadata.FromLambdaExpression( expression, helper.ViewData );
Object value = metadata.Model;
String name = metadata.PropertyName;
3。仅使用 MemberExpression 获取成员名称
string GetPropertyName<T>(Expression<Func<T>> property)
{
var propertyInfo = (property.Body as MemberExpression).Member as PropertyInfo;
if (propertyInfo == null)
{
throw new ArgumentException("The lambda expression 'property' should point to a valid Property");
}
return propertyInfo.Name;
}
它们的实现都与第一眼不同(使用 Reflector 进行调查),但我没有深入研究。
我已经坚持了很多解决问题的方法,想知道哪种解决方案更适合不同的情况,为什么?
如果有任何帮助,我将不胜感激
【问题讨论】:
标签: asp.net-mvc lambda modelmetadata