2011-10-28 113 views
2

複雜視圖我有具有三個表的數據庫:A,B,和C.渲染在MVC 3

我所需的視圖來呈現以特定方式的數據。循環遍歷A,然後在B下列出B的行,其中B.aID = A.ID,列出C的每一行下的C的每一行,其中C.bId = B.ID。

我是新來的ASP.NET MVC3,我不知道如何做到這一點。我見過的所有例子都很簡單。

回答

2

我會從添加三個模型開始:A,B和C.在這些模型中,A包含B的列表,而B包含C的列表。出於測試目的,我還會添加一些內容來唯一標識它們,例如名稱。例如:

public class A 
{ 
    public string Name { get; set; } 

    public List<B> Bs { get; set; } 
} 

public class B 
{ 
    public string Name { get; set; } 

    public List<C> Cs { get; set; } 
} 

public class C 
{ 
    public string Name { get; set; } 
} 

在我的控制器中,我將添加一個操作方法,用數據填充這些模型。出於測試目的,我使用虛擬數據。

public ActionResult List() 
{ 
    C c1 = new C() { Name = "C1" }; 
    C c2 = new C() { Name = "C2" }; 
    C c3 = new C() { Name = "C3" }; 
    C c4 = new C() { Name = "C4" }; 

    B b1 = new B() { Name = "B1", Cs = new List<C>() { c1, c3 } }; 
    B b2 = new B() { Name = "B2", Cs = new List<C>() { c2, c4 } }; 
    B b3 = new B() { Name = "B3", Cs = new List<C>() { c1, c2, c4 } }; 
    B b4 = new B() { Name = "B4", Cs = new List<C>() { c1, c2, c3, c4 } }; 

    A a1 = new A() { Name = "A1", Bs = new List<B>() { b1, b2 } }; 
    A a2 = new A() { Name = "A2", Bs = new List<B>() { b3, b4 } }; 
    A a3 = new A() { Name = "A3", Bs = new List<B>() { b1, b2, b3, b4 } }; 

    List<A> listOfAs = new List<A>() { a1, a2, a3 }; 
    return View(listOfAs); 
} 

而對於最後一塊,顯示所有這一切的視圖。只需在嵌套方式使用@foreach給了我們什麼,我們需要:

@model IEnumerable<HelloMvc.Models.A> 

<h2>List of As</h2> 

<table> 
    <tr> 
     <th></th> 
    </tr> 

@foreach (var a in Model) { 
    <tr> 
     <td> 
      @a.Name<br /> 
      @foreach (var b in a.Bs) { 
       @b.Name<br /> 

       foreach (var c in b.Cs) 
       { 
          @c.Name<br /> 
       } 
      } 

     </td> 
    </tr> 
} 

注意「HelloMvc」是我的命名空間。您可能需要將其更改爲您自己的名稱空間。

一切放在一起,這導致與嵌套B的和C的列表:

A1 
B1 
C1 
C3 
B2 
C2 
C4 
A2 
B3 
C1 
C2 
C4 
B4 
C1 
C2 
C3 
C4 
A3 
B1 
C1 
C3 
B2 
C2 
C4 
B3 
C1 
C2 
C4 
B4 
C1 
C2 
C3 
C4 

(你必須想象一些造型)希望這個例子可以幫助你。

(旁註) 有趣的是,第三個foreach在它前面沒有'@'。這不是一個錯字或錯誤,如果我把它放在那裏,會引發一個例外。我懷疑Razor視圖引擎中的小錯誤。

1

如果你說你有三種型號A,B和C - 和u要顯示與A,B和C

操縱數據

你可以做到這一點的看法,在您的控制器的操作方法做過濾並返回一個視圖作爲動態模型(匿名類型)。在視圖中,您可以閱讀此模型並使用必需的html構建頁面。使用方法

(可選)您可以定義一個新的Model類,它將表示您需要的結果類型。