Доступ к свойствам списка в типизированном представлении из модели представления - PullRequest
1 голос
/ 12 мая 2011

У меня есть модель основного вида со следующими двумя списками из двух разных таблиц БД,

public IEnumerable <Customer> SomeCustomer { get; set; }
public IEnumerable <CustomerSite> CustomerSites { get; set; }

В моем контроллере у меня есть

public ViewResult Index()
{
    masterViewModel sitesModel = new masterViewModel();
    return View(sitesModel);
}

Тогда, на мой взгляд, я пишу

@model IEnumerable<trsDatabase.Models.masterViewModel>

Если я пытаюсь получить доступ к модели, используя для каждого оператора

@foreach (var customer in Model)

Когда я набираю @customer. Это позволит мне получить доступ только к двум спискам, а не к отдельным свойствам в списке.

Я думал, что смог бы сделать это, например,

@customer.CustomerSites.UnitNo

Но самое дальнее, что я могу сделать, это

@customer.CustomerSites

И это, очевидно, не позволит мне получить доступ к отдельным свойствам в списках

У кого-нибудь есть идеи о том, что я здесь делаю неправильно? Нужно ли определять свойства из viewmodel в контроллере? (Думаю нет)

Обновление

У меня есть следующий код в моей модели просмотра,

namespace trsDatabase.Models
{
    public class masterViewModel
    {
    public IEnumerable <Customer> Customers { get; set; }
    public IEnumerable <CustomerSite> CustomerSites { get; set; }
    }
}

Тогда следующее в контроллере,

public ViewResult Index()
{
    masterViewModel sitesModel = new masterViewModel();
    return View(sitesModel);
}

Затем я изменил свое представление представления на

@model trsDatabase.Models.masterViewModel

Это позволяет мне получить полный доступ к свойствам из представления, но выдает ошибку с циклом foreach, поскольку его нельзя использовать, когда представление наследует модель, а не список Ienumerable, нужно ли мне изменять синтаксис для отображения списка в представлении и использования чего-то другого, кроме foreachloop?

1 Ответ

0 голосов
/ 12 мая 2011

Я думаю, вам нужен еще один цикл, так как CustomerSites - это коллекция:

@foreach (var customer in Model)
    foreach (var site in customer.CustomerSites)
        @site.UnitNo

РЕДАКТИРОВАТЬ ПОСЛЕ КОММЕНТАРИИ

Создать класс ViewModel:

class ViewModel
{
    public IEnumerable<Customer> Customer { get; set; }
}

Заполните его в контроллере и передайте его функции View(). Измените представление для ввода (@model ViewModel). Тогда из внутреннего вида ваше свойство Model будет иметь тип ViewModel, и вы сможете получить доступ к коллекции клиентов через @Model.Customers

...