Каков рекомендуемый способ создания главной / подробной страницы с использованием ASP.NET MVC? - PullRequest
2 голосов
/ 21 февраля 2009

Есть ли у кого-нибудь какие-либо предложения / рекомендации по созданию главных / подробных страниц с использованием ASP.NET MVC Framework?

Фон

У меня есть страница с информацией о клиенте, под каждой из которых мне нужно отобразить 0 или более связанных записей об этом клиенте.

Схема базы данных выглядит примерно так:

Клиенты - один ко многим -> ClientData

В настоящее время я использую LINQ для классов данных, которые заполняются с помощью хранимых процедур. Чтобы получить информацию о клиенте, я бы написал:

var clientQuery = from client in dataContext.GetClients ()
orderby client.CompanyName
select client;

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

var clientDataQuery = from clientData in dataContext.GetClientData (client.ClientId)
orderby clientData.CreatedDate
select clientData;

Вопрос

Что лучше всего для этого?

  1. Используйте ViewData и сохраняйте каждый запрос
  2. Используйте типизированную модель представления (возможно, используя класс для представления клиента со связанной информацией в списке
  3. Другое ...

Спасибо, Кирон

1 Ответ

2 голосов
/ 21 февраля 2009

Используйте IDictionary>, который затем следует поместить в класс viewdata.

Это позволит вам выполнять фильтрацию / сортировку на уровне контроллера при сохранении строгой корреляции между клиентом и его данными.

Пример:

public class ClientController{
    public ViewResult ClientList(){
        var clientsAndData = new Dictionary<Client,IEnumerable<ClientData>>();

        var clients = from client in dataContext.GetClients()
            orderby client.CompanyName
            select client;

        foreach( var client in clients )
          clientsAndData.Add(
            client,
            (
                from clientData in dataContext.GetClientData(client.ClientId)
                orderby clientData.CreatedDate
                select clientData
            ).ToList()
          );

        return View( new ClientListViewData{ Clients = clientsAndData } );
    }
}

public class ClientListViewData{
    public IDictionary<Client,IEnumerable<ClientData>> Clients{ get; set; }
}
...