ASP.NET MVC: как передать более одного объекта в метод View?
Я закончил учебник по NerdDinner и теперь немного играю с проектом. На главной странице показаны все предстоящие обеды:
public ActionResult Index()
{
var dinners = dinnerRepository.FindUpComingDinners().ToList();
return View(dinners);
}
В классе DinnerRepository у меня есть метод FindAllDinners
и я хотел бы добавить к указанному выше методу индекса количество всех обедов, что-то вроде этого:
public ActionResult Index()
{
var dinners = dinnerRepository.FindUpComingDinners().ToList();
var numberOfAllDinners = dinnerRepository.FindAllDinners().Count();
return View(dinners, numberOfAllDinners);
}
Конечно, это не работает. Поскольку я довольно новичок в ООП, мне понадобится помощь с этим.
Спасибо,
Ile
5 ответов
Создать модель вида:
public class DinnerViewModel
{
public List<Dinner> Dinners { get; set; }
public int NumberOfAllDinners { get; set; }
}
public ActionResult Index()
{
var dinners = dinnerRepository.FindUpComingDinners().ToList();
var numberOfAllDinners = dinnerRepository.FindAllDinners().Count();
return View(new DinnerViewModel { Dinners = dinners, NumberOfAllDinners = numberOfAllDinners } );
}
Вам необходимо создать объект-оболочку, который содержит объекты, которые вы хотите передать в качестве его открытых свойств. Например, создайте объект с именем DinnerViewModel и присвойте ему два свойства и задайте для них два свойства: одно - List с именем Dinners, а другое - int с именем DinnerCount. Затем передайте DinnerViewModel в представление, и вы можете получить доступ к Model.Dinners
а также Model.DinnerCount
В вашем случае я бы предпочел решение, упомянутое LukLed.
В общем, вы можете, конечно, также передать несколько значений из вашего контроллера в представление с помощью ViewData:
ViewData["dinners"] = dinners;
ViewData["numberOfAllDinners"] = 150;
...
Для получения дополнительной информации также посмотрите на эту ссылку.
Помните, что вы начинаете с использования наследственных данных ViewData в ваших ASPX-файлах и возвращаете то же самое в ваших операторах возврата. Из-за этого я полагаю, что это была проблема с атрибутом Inherits в верхней части файлов ASP.NET. Но, если вы получаете сообщение об ошибке при попытке создать или отредактировать новый Обед, когда вы находитесь на странице "Предстоящие Обеды" (сгенерированной из файла Details.aspx и файла LINQ, который получает все Обеды, которые происходят после сегодняшней даты), перейдите в каталог "Контроллеры", в частности DinnerController.cs. Затем посмотрите на методы Edit и / или Create. ответ лежит прямо здесь. Если вы поставите точки останова на этих методах, вы сможете понять это. Если нет, продолжайте читать:
Посмотрите, где это терпит неудачу, строка "возврат...". Возможно, я единственный человек, который забыл изменить это, но моя ошибка та же, что и у людей, попадающих на эту страницу, и это, как я это исправил..... строка 'return(dinner)' в Create and Edit (и любые другие, с которыми у вас возникают проблемы), они используют метод NerDinner.Model.Dinner / ViewData. Однако, если вы измените его на метод возврата ViewModel, он должен это исправить, например: 'return(new DinnerFormViewModel(dinner));', он должен работать для вас. Я надеюсь, что это помогает, поскольку это было то, что было моей проблемой. Просто упускать из виду.