2009-06-16 5 views
2

Я ищу для использования asp.net MVC для нового проекта. Я посмотрел на разные примеры на asp.net и через Интернет. Я до сих пор не получил ответа, что является лучшим способом объединить вывод различных моделей в один вид. Например, моя домашняя страница будет содержать категории, местоположения, моментальные снимки последних сообщений. Они будут поступать из трех разных моделей. Я создаю единые viewdata со всем в нем и messup внутри представления для размещения контента соответственно?Объединение нескольких выходов в одном представлении в asp.net MVC

ответ

0

Обычно я создаю один класс модели представления, который объединяет несколько классов модели данных в этом сценарии.

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

8

Вы создаете ViewModel для домашней странице ... что-то вроде ...

public class MyHomepageViewModel 
{ 
    public Categories MyCategories { get; set; } 
    public Locations MyLocations { get; set; } 
    public Snapshots MySnapshots { get; set; } 

    public MyHomepageViewModel(Categories categories, Locations locations, Snapshots snapshots) 
    { 
     MyCategories = categories; 
     MyLocations = locations; 
     MySnapshots = snapshots; 
    } 
} 

, а затем вы сильно ввести свою страницу с этой точки зрения модели, и вы будете иметь доступ ко всему, что вам нужно, на ваш взгляд =)

+0

Спасибо, Джон ... теперь я действительно получаю то, что такое ViewModel. – kdmurray

+0

Это замена контроллера? Если да, то где это происходит в структуре папок asp.net? В новой папке с именем ViewModels? – George

+1

@George ... это не заменит контроллер, это будет использоваться действием контроллера, чтобы заполнить представление, вы можете поместить его в любую папку в структуру папок, я обычно помещал их в папку ViewModels. –

3

Вы должны Модельное для этого:

public class HomeViewModel { 
    public IList<Category> Categories; 
    public IList<Location> Locations; 
    public IList<Snapshot> Snapshots; 
    public IList<Post> Recent; 
} 

Ваш взгляд должен быть строго типизированным:

<%@ Page Inherits="System.Web.Mvc.ViewPage<HomeViewModel>" %> 

<!-- <% var categories = Model.Categories %> --> 
Смежные вопросы