Могу ли я получить содержащую модель свойства в помощнике MVC2 Html - PullRequest
0 голосов
/ 19 февраля 2011

У меня есть Html помощник со следующей подписью:

public static MvcHtmlString UiAutoCompleteForWithId<TModel, TProperty>(this htmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes)

Я понимаю, как получить значение переданного элемента in и его метаданные, но есть ли в любом случае доступ к содержащейся модели, или, более конкретно, значение конкретного элемента-близнеца (свойство) переданного элемента член по имени?

Cheers, Matthew

Редактировать: ОК. Я думаю, что я могу сделать это, используя метод ModelMetadata.FromStringExpression (иногда требуется запрос, прежде чем вы это видите, а?), Но я это лучший способ сделать это?

1 Ответ

1 голос
/ 19 февраля 2011

Если вам нужен доступ к значению члена-брата, это означает, что вы предполагаете, что модель представления имеет этого члена-брата.Это означает, что ваш HTML помощник больше не должен быть универсальным.Вы можете сделать это:

public static MvcHtmlString UiAutoCompleteForWithId<TProperty>(
    this HtmlHelper<MyViewModel> helper, 
    Expression<Func<MyViewModel, TProperty>> expression, 
    object htmlAttributes
)
{
    MyViewModel model = helper.ViewData.Model;
    var value = model.SomeOtherSiblingProperty;
    // TODO: do something with this property
    ...
}

Или, если ваши модели представлений реализуют какой-то общий базовый интерфейс, содержащий рассматриваемый элемент-брат, вы можете указать общее ограничение:

public static MvcHtmlString UiAutoCompleteForWithId<TModel, TProperty>(
    this HtmlHelper<TModel> helper, 
    Expression<Func<TModel, TProperty>> expression, 
    object htmlAttributes
) where TModel: ISomeInterface
{
    ISomeInterface model = helper.ViewData.Model;
    var value = model.SomeOtherSiblingProperty;
    // TODO: do something with this property
    ...
}
...