Как сделать 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);
Другие вопросы по тегам