Как назначить несколько моделей для одного представления? - PullRequest
1 голос
/ 21 января 2009

У меня есть список городов и список стран, и оба они я хочу иметь в файле представления (aspx). Я пытаюсь что-то вроде этого, но это не работает:

namespace World.Controllers { открытый класс WorldController: Controller { public ActionResult Index () {

        List<Country> countryList = new List<Country>();
        List<City> cityList = new List<City>();

        this.ViewData["CountryList"] = countryList;
        this.ViewData["CityList"] = cityList;

        this.ViewData["Title"] = "World Contest!";
        return this.View();
    }
}

}

<table>
<% foreach (Country country in this.ViewData.Model as IEnumerable) { %>
    <tr>
        <td><%= country.Code %></td>
    </tr>
<% } %>
</table>

1 Ответ

4 голосов
/ 21 января 2009

Вам нужно получить данные просмотра, которые вы установили по имени. И.Е.

<table>
<% foreach (Country country in (List<Country>)this.ViewData["CountryList"]) { %>
        <tr>
                <td><%= country.Code %></td>
        </tr>
<% } %>
</table>

Но это не идеально, потому что оно не сильно напечатано. Я хотел бы предложить создать модель, специфичную для вашего взгляда.

public class WorldModel
{
    public List<Country> Countries { get; set; }
    public List<City> Cities { get; set; }
}

А затем создание вашего вида строго типизируется как представление WorldModel. Тогда в вашем действии:

List<Country> countryList = new List<Country>();
List<City> cityList = new List<City>();
WorldModel modelObj = new WorldModel();
modelObj.Cities = cityList;
modelObj.Countries = countryList;

this.ViewData["Title"] = "World Contest!";
return this.View(modelObj);

Просто убедитесь, что ваш взгляд строго напечатан:

public partial class Index : ViewPage<WorldModel>

И вы сможете сделать это следующим образом:

<table>
<% foreach (Country country in ViewData.Model.Countries) { %>
        <tr>
                <td><%= country.Code %></td>
        </tr>
<% } %>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...