2

ASP.NET MVC フレームワークを使用してマスター/詳細ページを実行するための提案/ベスト プラクティスはありますか?

バックグラウンド

クライアント情報のページがあります。各ページの下に、そのクライアントに関する 0 個以上の関連レコードを表示する必要があります。

データベース スキーマは次のようになります。

クライアント -- 1 対多 --> 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. 他の...

ありがとう、キーロン

4

1 に答える 1

2

IDictionary> を使用し、ビューデータ クラスにラップする必要があります。

これにより、クライアントとそのデータの間の厳密な相関関係を維持しながら、コントローラー レベルでフィルター処理/並べ替えを行うことができます。

例:

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; }
}
于 2009-02-21T17:22:12.210 に答える