2011-12-15 5 views
2

У меня есть HomeController и в действии Index я хочу работать с несколькими объектами, например, я покажу новости, рисунки, портфолио в HomePage. Итак, как я могу передать несколько объектов для просмотра.MVC 3 Страница индекса с несколькими объектами

public ActionResult Index() 
{ 
      var news = newsRepository.GetAll(); 
      return View(news); 
} 

Выше, я могу передать только объект новостей для просмотра. Но, как вы знаете, в HomePage веб-сайта будет больше, чем один объект.

В представлении, когда я работаю только с новостями, я могу передать «IEnumerable» с контроллера. Но чтобы объявить более одного объекта в представлении, что мне делать? Извините, я новичок в MVC3. В WebForms это было легко с помощью элементов управления пользователя или элементов управления .NET, но в MVC это выглядит сложным.

Благодаря

ответ

3

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

Я создаю папку ViewModel для этих классов.

public class IndexViewModel 
{ 
    public PortfolioViewModel Portfolio {get; set;} 
    public IEnumerable<PhotosViewModel> Photos {get; set;} 
    public IEnumerable<NewsViewModel> News {get; set;} 
    //.../// 
} 

В вашем контроллере.

public ActionResult Index() 
{ 
    var model = new IndexViewModel(); 
    model.news = newsRepository.GetAll(); 
    return View(model); 
} 
+0

и для представления следует передать его как «IEnumerable » или только IndexViewModel? – mehmetserif

+1

Просто сам объект. Это будет выглядеть как @model IndexViewModel – Dean

2

Создать модель со всеми subclasses- моделеем, и отправить его на просмотр.

public class A 
{ 
    public int Code {get; set;} 
    public string Name {get; set;} 
} 

public class B 
{ 
    public int First {get; set;} 
    public int Second {get; set;} 
} 

public class ViewModel 
{ 
    public A TheA {get; set;} 
    public B TheB {get; set;} 
} 

public ActionResult Index() 
{ 
     var model = new ViewModel(); 
     return View(model); 
} 
+0

Люди действительно должны объяснить, почему они сбиты с толку !!! – gdoron

1

Вы можете использовать ViewData для хранения нескольких объектов. Но лучшим вариантом было бы создание класса, в котором хранятся все те другие объекты, которые необходимо передать в представление.

2

Вы можете эффективно создать что-то похожее на пользовательский контроль, используя ChildAction.

Ваши взгляды/модели/контроллеры для новостей, изображений, портфолио останутся раздельными.

Вы можете объединить их в домашней странице, как так:

@Html.Action("Index", "News") 
@Html.Action("Index", "Pictures") 
@Html.Action("Index", "Portfolio") 
Смежные вопросы