Как сделать Viewmodel типа IEnumerable? - PullRequest
2 голосов
/ 13 мая 2011

Я использую следующий код для модели основного вида, которая содержит два списка данных,

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 ]

2 голосов
/ 13 февраля 2013

Изменить это

@model IEnumerable<trsDatabase.Models.masterViewModel>

к этому

@model trsDatabase.Models.masterViewModel

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

1 голос
/ 25 ноября 2014

Да. Вы можете ... в вашей модели (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);
...