ASP.net MVC.2 возвращает несколько объектов строго типизированной модели представления - PullRequest
0 голосов
/ 28 июня 2011

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

Я немного застрял в том, что лучший способ сделать это,

Обе таблицы связаны полем идентификатора клиента, у меня настроен интерфейс репозитория и шаблон отображения, который строго типизирован для модели представления, которая содержит свойства для объекта Customer и объекта Site, все, что мне нужно отобразить список сайтов клиентов вместе с соответствующим именем клиента из таблицы клиентов.

В шаблоне отображения у меня есть следующее

<%= Html.DisplayFor(x => x.Customers.CustomerName) %>
<%= Html.DisplayFor(x => x.Customers.Site.AddressLine1) %>

У меня работает этот шаблон отображения, но моя модель пуста.

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

IQueryable<Customer> Customers { get; }

Затем просто выберите LINQ.

Но так как эти данные будут содержать как клиентов, так и сайты клиентов, я не уверен, как определить это в интерфейсе?

Также будет ли LINQ-соединение подходящим методом для возврата этих данных в мою viewmodel? что-то вроде

var Customers =

    from c in customers

    join cs in customerSites on c equals cs.CustomerId into ps

    from p in ps

    select new { Customer = c, cs.CustomerName };

ОБНОВЛЕНИЕ =========

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

public class CustomerViewModel
{
    public int Id { get; set; }
    public string CustomerName { get; set; }
    public string PrimaryContactName { get; set; }
    public SiteViewModel Site { get; set; }
}

Это как заполнить модель в репозитории / контроллере обоими объектами для отображения в списке, с которым я борюсь.

1 Ответ

0 голосов
/ 28 июня 2011

Возможно, вы уже выполнили следующие шаги, поэтому, пожалуйста, игнорируйте, если у вас есть ..

1 создайте папку ViewModel в вашем решении.

2 Создайте модель базового вида .... может выглядеть так ->

public class BaseViewModel
    {
        public PageProperties PageProperties { get; set; }
        public User User { get; set; }
    }

3 Установить модель представления для действия вашего контроллера, может быть так ->

public class ProjectVM : BaseViewModel
    {
        public ProjectPoco project { get; set; }

    }

4 В вашем контроллере получите ваши данные из вашего репозитория и передайте их экземпляру вашей модели представления следующим образом ->

var contextVM = new ProjectVM ();

        contextVM.project = ObjectExtensions.Convert<ProjectPoco>(tbl.Single(id));
        contextVM.PageProperties = new PageProperties
                                       {
                                           Heading = contextVM.project.Name,
                                           SubHeading = "Details for" +

contextVM.project.Name};return View (contextVM);

5 установить модель представления в соответствии с моделью представления ->

@ model NerveCentre.ViewModels.ProjectVM

6 используйте вашу модель представления для извлечения данных в ваше представление ->

@Model.project.Description

Быстрое и грубое описание передачи данных вваш взгляд через модель представления.надеюсь, что я ничего не пропустил.

Что касается данных .. глядя на то, как у вас есть модель (Customers.Site.AddressLine1), было бы просто невозможно передать клиентов из вашего запроса в вашу модель представления?

Таким образом, ваша модель может выглядеть примерно так: *

    public class SomeViewModel: BaseViewModel
    {
        public List<Customer> Customers { get; set; }

    }

Если вы сообщите нам, что вы используете для доступа к данным, мы могли бы помочьбольше с особенностями получения данных из ваших таблиц и в формате, который вы хотите?

...