2012-01-15 10 views
1

у меня есть этот метод расширения:Попытки получения значения в модели многоуровневой/собственности ассоциации с

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; 
} 

Это работает очень хорошо для «одного уровня», как это:

проектируемых => Рго. MyProperty

Поэтому он возвращает значение для MyProperty, расположенного под моделью.

Но это не работает на «мульти уровня», как это:

проектируемых => proj.Level1.MyProperty

Здесь, пытаясь вернуть значение для MyProperty, расположенного по модели но мы теряем уровень1!

Я не знаю, ясно ли я?

Спасибо.

ответ

1

Вы можете использовать метод ModelMetadata.FromLambdaExpression и инспектировать результате в Model свойство

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

Он работает, спасибо очень много. – Bronzato

Смежные вопросы