как изменить директиву @model на другую модель в режиме бритвы?

У меня есть контроллер, который создает модель и вызывает представление, передавая модель в качестве параметра. В представлении есть директива @model, указывающая тип модели. Я хочу повторно использовать тот же вид, но передать другую модель из контроллера. Можно ли динамически (или условно )изменить директиву @model в представлении?

Например, в моем действии контроллера:

var contactsModel = db.GetContacts();
var companiesModel = db.GetCompanies();
return (someCondition)? View(contactsModel):View(companiesModel);

Тогда как я могу определить @model в директиве View, чтобы удовлетворить обе модели? Я хочу, чтобы одно и то же представление отображало информацию на основе типа переданной модели.

Спасибо.


ОБНОВЛЕНИЕ:

Спасибо, но мне нужно использовать один общий вид только с разными моделями.

Это возможно, вот как это можно сделать.

В представлении я определяю:

@model IEnumerable<MvcApplication1.Models.IBaseInterface>

В классе Model я определяю:

public interface IBaseInterface { }

public class Contact: IBaseInterface {}

public class Company: IBaseInterface {}

Затем в представлении я использую:

@if (Model is List<Contact>) {
    @foreach (var item in (List<Contact>)Model)
        { // Here item has type Contact }
}

@if (Model is List<Company>) {
    @foreach (var item in (List<Company>)Model)
        { // Here item has type Company }
}

Работает отлично:)

7
задан monstro 16 July 2012 в 00:24
поделиться