在 MVC 3 中渲染复杂视图

Posted

技术标签:

【中文标题】在 MVC 3 中渲染复杂视图【英文标题】:Rendering a Complex View in MVC 3 【发布时间】:2011-10-28 14:42:04 【问题描述】:

我有一个包含三个表的数据库:A、B 和 C。

我希望视图以特定方式呈现数据。遍历 A,然后在 A 下列出 B 的行,其中 B.aID = A.ID,在 B 的每一行下列出 C 的每一行,其中 C.bId = B.ID。

我是 ASP.NET MVC3 的新手,我不确定如何完成此操作。我看到的所有例子都是直截了当的。

【问题讨论】:

【参考方案1】:

我将从添加三个模型开始: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 的 A 列表:

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 视图引擎中的小错误。

【讨论】:

【参考方案2】:

如果你说你有三个模型 A、B 和 C - 你想用从 A、B 和 C 操作的数据显示视图。

您可以这样做,在控制器的 action 方法中进行过滤并将视图作为动态模型(匿名类型)返回。在视图中,您可以阅读此模型并使用所需的 html 构建您的页面。表示使用

您可以选择定义一个新的模型类来表示您需要的结果类型。

【讨论】:

以上是关于在 MVC 3 中渲染复杂视图的主要内容,如果未能解决你的问题,请参考以下文章

在asp.net mvc 3项目中渲染部分视图onclick

关于ASP.NET MVC部分视图渲染问题。

在 MVC 中从区域渲染局部视图

Spring MVC 3 有视图组件吗?

Spring MVC:无法渲染视图 - $ 正在视图中渲染

如何在 Spring MVC 中渲染局部视图