Asp.net-mvc передает ViewModel в частичное представление

Может это и глупо, но я не могу понять...

Так вот в чем проблема. У меня есть модель, скажем, А и модель Б.

class A
{
    B b = new B();
}

class B
{
    ...
}

Теперь у меня есть ViewModel для B (но не для A).

Итак, теперь у меня есть представление, строго типизированное для A. И оно вызывает другое частичное представление B для отображения всех свойств B. Но теперь, как передать модель представления для B частичному представлению? Я могу передать модель, просто вызвав Model.b, но не модель представления!


person Aditi    schedule 16.07.2013    source источник
comment
Простой ответ нет? Я выброшу исключение.   -  person Satpal    schedule 16.07.2013
comment
@Satpal Но что тогда делать? Я должен использовать модель представления.   -  person Aditi    schedule 16.07.2013
comment
просто вам нужно сопоставить модель B с ViewModel. Вы, должно быть, определили картограф или конвертер, чтобы использовать это. Определил метод в модели B, который преобразует и возвращает вам ViewModel, и вы можете передать это ViewModel.   -  person Satpal    schedule 16.07.2013
comment
@Satpal Ох .. это именно то, что мне нужно сделать .. Но у меня нет определенного преобразователя или преобразователя. И гугление просто дает много страниц об AutoMapper... которые я не хочу использовать. Любой пример кода на этом??   -  person Aditi    schedule 17.07.2013


Ответы (3)


Включите класс B в качестве свойства в класс A. Итак, теперь вы можете использовать класс B как Model.bModel.

class A
{
    public B bModel { get; set; }
}

class B
{

}
person ssilas777    schedule 16.07.2013

Вам нужно расширить одну ViewModel, чтобы она включала все, к чему вы хотите получить доступ. Затем просто получите доступ к различным его компонентам в зависимости от того, находитесь ли вы в обычном или частичном представлении.

person B Cotter    schedule 16.07.2013

Вы можете передать B через ViewBag. В контроллере добавить

ViewBag.dataB = B;

Затем вы можете отобразить частичный вид с моделью, используя

@Html.Partial("PartialName", ViewBag.dataB)

Или вы можете добавить свойство геттера для доступа к B и использовать его для частичного рендеринга.

person Mirsha    schedule 16.07.2013