Как сделать Viewmodel типа IEnumerable?
Я использую следующий код для модели основного представления, которая содержит два списка данных,
namespace trsDatabase.Models
{
public class masterViewModel
{
public IEnumerable <Customer> Customers { get; set; }
public IEnumerable <CustomerSite> CustomerSites { get; set; }
}
}
Я использую следующий код для передачи veiwmodel в представление,
public ViewResult Index()
{
masterViewModel sitesModel = new masterViewModel();
return View(sitesModel);
}
Тогда, на мой взгляд, у меня есть следующее,
@model IEnumerable<trsDatabase.Models.masterViewModel>
foreach (var site in customer.CustomerSites)
{
foreach (var cust in customer.Customers)
{
<tr>
<td>
@cust.CustomerName
</td>
<td>
@site.UnitNo
</td>
используя приведенный выше код, я могу получить доступ ко всем свойствам из двух списков в модели представления, однако, когда я перехожу к представлению, я получаю ошибку, так как представление ожидает IEnumerable. Если я изменю объявление, чтобы просто передать viewmodel
@model trsDatabase.Models.masterViewModel
foreach
оператор не будет работать, он дает эту ошибку
Элемент модели, передаваемый в словарь, имеет тип 'trsDatabase.Models.masterViewModel', но для этого словаря требуется элемент модели типа 'System.Collections.Generic.IEnumerable`1[trsDatabase.Models.masterViewModel]'.
Может кто-нибудь предложить какой-либо совет или указать мне правильное направление для решения этой проблемы, возможно ли сделать мою модель представления IEnumerable?
2 ответа
Изменить это
@model IEnumerable<trsDatabase.Models.masterViewModel>
к этому
@model trsDatabase.Models.masterViewModel
Вы передаете в единственном экземпляре masterViewModel, поэтому ваше представление должно ожидать единственного экземпляра, который является именно тем, что говорит вам ошибка, если не загадочным образом.
Да, вы можете... в вашей модели (masterViewModel) сделать список клиентов и клиентов следующим образом:
namespace trsDatabase.Models
{
public class masterViewModel
{
public List<Customer> Customers { get; set; }
public List<CustomerSite> CustomerSites { get; set; }
}
}
в той же модели определите метод, который будет возвращать IEnumerable следующим образом:
public IEnumerable<Customer> Getall()
{
List<Customer> lcustomer= new List<Customer>();
//Get Customer data from Database or wherever
lcustomer.Add(new Customer{ firstname= "Quentin ", lastname= "tarantino" });
return lcustomer;
}
В вашем контроллере создайте экземпляр вашей модели. затем вызовите метод Getall(), который вернет IEnumerable в основном список клиентов, и передайте его в View
var rep = new masterViewModel();
var model = rep.Getall();
return View(model);