试图在多级模型/属性关联中获取价值

时间:2012-01-15 15:34:30

标签: asp.net-mvc

我有这种扩展方法:

public static string GetValueFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
{
    MemberExpression body = (MemberExpression)expression.Body;
    string propertyName = body.Member.Name;
    TModel model = helper.ViewData.Model;
    string value = typeof(TModel).GetProperty(propertyName).GetValue(model, null).ToString();
    return value;
}

这对于“一个级别”非常有效:

proj =&gt; proj.MyProperty

因此它返回位于模型下的MyProperty的值。

但它不适合像这样的“多层次”:

proj =&gt; proj.Level1.MyProperty

在这里,尝试返回位于模型下的MyProperty的值,但是我们放松了level1!

我不知道我是否清楚?

感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用ModelMetadata.FromLambdaExpression方法并检查结果的Model属性

ModelMetadata.FromLambdaExpression(expression, helper.ViewData).Model