2009-06-19 18 views
4

我有一個觀點,這將是這樣的:我應該如何構建我的ViewModel,用於我需要在ASP.NET MVC中顯示的分層數據?

alt text

我試圖找出如何我要代表我的ViewModel了這一觀點。每個「代理商」可以有多個「業務單位」,每個「業務單位」可以有幾個「客戶」。

在數據庫中,我很容易地映射表和外鍵機構,BusinessUnit和客戶表代表此。

不過,現在我需要使用LINQ查詢這個數據從數據庫中,然後構造表示這個樹狀結構,所以我的視圖可以使其一個ViewModel對象。

誰能給我什麼數據結構,我應該使用,還是什麼我的視圖模型可能看起來像在C#代碼這個層次結構的提示?我需要創建我的ViewModel對象以傳遞到此視圖。

如何代表視圖模型任何建議都感激!

回答

1

只存儲一個列表實例在你的視圖數據?

public class Agency 
{ 
    public List<BusinessUnit> Units; 
    public string Name; 
    public int NumberOfAccounts 
    { 
     get 
     { 
     int ret = 0; 
     foreach(BusinessUnit unit in units) 
      ret += unit.NumberOfAccounts; 
     return ret; 
     } 
    } 
    // ... continue this strategy for other properties 
} 
public class BusinessUnit 
{ 
    public List<Client> clients; 
    public string Name; 
    public int NumberOfAccounts 
    { 
     get 
     { 
     int ret = 0; 
     foreach(Client client in clients) 
      ret += client.NumberOfAccounts; 
     return ret; 
     } 
    } 
    // ... continue this strategy for other properties 

} 
public class Client 
{ 
    public string Name; 
    public int NumberOfAccounts; 
} 
0

使用「ADO的.Net實體數據模型」模板來控制連接到支持分層數據的MSSQL數據庫我最近一直和它一直運作良好。

您可以只需直接配合你的表示層的數據模型。

如果你的鑰匙在數據庫中正確設置它的瞬間起牀running..I認爲這還需要ADO.Net 3.5

Creating ADO.NET Entity Framework Entity

MS information on entity

+0

不幸的是,我們必須堅持使用我們目前使用的技術堆棧。我需要按照我在問題中所說的做,構建一箇中間ViewModel對象並將其傳遞給我的視圖。 – KingNestor 2009-06-19 16:06:05

0

假設你LINQ2SQL實現中有同樣的關係作爲數據庫(它,如果你沒有拖放到設計,他們肯定做的),這裏是我會怎麼處理它。

我會創建一個類型機構的強類型局部視圖,將代表每個部分(機構,在您的情況),稱之爲AgencyReportSection.ascx。這種控制將採取一個代理機構,通過其業務部門進行迭代,這反過來又遍歷其客戶。

無論你正在打包備份您的數據,做這樣的事情:

DataContext context = new DataContext(); 
DataLoadOptions options = new DataLoadOptions(); 
options.LoadWith<Agency>(a => a.BusinessUnit); 
options.LoadWith<BusinessUnit>(b => b.Client); 

context.LoadOptions = options; 

什麼這會給你的是,當上下文得到一個機構,它會按照定義的關係,並給你的對象作爲好。所以,你得到:

Agency a = context.Agency.FirstOrDefault(); 
IEnumerable<BusinessUnit> units = a.BusinessUnits; 
IEnumerable<Client> clients = units.Clients; 

你的觀點可以這樣做:

<% foreach(var agency in agencies)%{> 
<% Html.RenderPartial("AgencyReportSection"); %> 
<%}%> 

的原因,你正在做的數據加載選項是爲了避免延遲加載在視圖中,讓模型收拾了所有的必要的數據。

我希望我能正確理解您的問題...

相關問題