複雜視圖我有具有三個表的數據庫:A,B,和C.渲染在MVC 3
我所需的視圖來呈現以特定方式的數據。循環遍歷A,然後在B下列出B的行,其中B.aID = A.ID,列出C的每一行下的C的每一行,其中C.bId = B.ID。
我是新來的ASP.NET MVC3,我不知道如何做到這一點。我見過的所有例子都很簡單。
複雜視圖我有具有三個表的數據庫:A,B,和C.渲染在MVC 3
我所需的視圖來呈現以特定方式的數據。循環遍歷A,然後在B下列出B的行,其中B.aID = A.ID,列出C的每一行下的C的每一行,其中C.bId = B.ID。
我是新來的ASP.NET MVC3,我不知道如何做到這一點。我見過的所有例子都很簡單。
我會從添加三個模型開始: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視圖引擎中的小錯誤。
如果你說你有三種型號A,B和C - 和u要顯示與A,B和C
操縱數據你可以做到這一點的看法,在您的控制器的操作方法做過濾並返回一個視圖作爲動態模型(匿名類型)。在視圖中,您可以閱讀此模型並使用必需的html構建頁面。使用方法
(可選)您可以定義一個新的Model類,它將表示您需要的結果類型。