将嵌套数据从Controller传递到ASP.Net MVC(LINQ)中的View

时间:2010-01-15 08:34:02

标签: asp.net-mvc linq-to-sql controller nested views

我在ASP.Net MVC中使用LINQ to SQL(SQL Server)。我的页面需要显示每个区域内的所有区域和所有办公室(嵌套)。办公室属于郊区,而郊区又属于某个地区。即在每个区域内,我需要抓住存在于郊区内的办公室,这些办公室属于循环中的当前区域。

(伪代码)

    foreach(Region currentRegion in Regions)  
    {  
        Display Region's Heading  
        foreach(Office currentOffice in ALL OFFICES WHICH BELONG TO SUBURBS WHICH BELONG TO THIS REGION)  
        {  
             Display Office Name  
        }  
    }  

使用LINQ to SQL实现这一目标的最简洁的MVC范式是什么? (我是一个庞大的SQL粉丝,但我正在为这个项目使用LINQ to SQL)。

我不想只是为了做这么简单的事情而编写5个辅助类。我不是在寻找一个“完美的世界OO矫枉过正”的解决方案,干净,简约和简单是最好的。

我最好在Controller中汇总所有数据,这样我就不会得到一些与Controller责任等重叠的混乱视图。

1 个答案:

答案 0 :(得分:0)

在你的情况下,

  • 我会创建视图模型类RegionModelSuburbModelOfficeModel
  • 使用AutoMapper,我会将Region映射到RegionModel并将其传递给视图
  • 视图看起来像这样(Spark)=>

    <viewdata model="RegionModel region" />
    <for each="var suburb in region.Suburbs">
        <span each="var office in suburb.Offices">${office.Name}</span>
    </for>        
    

这是对“如何将嵌套数据传递到asp.net-mvc中查看?”的问题的答案。事情是 - 你的模型还不适合这个(Region类不直接与Suburbs,Suburbs with Offices绑定)。

所以 - 你需要确保你的Region包含Suburbs和Suburb包含的办公室。我不确定L2S,但在nhibernate中很容易 - 集合将按原样映射,默认情况下 - 保持延迟加载。 RegionController将负责正确使用RegionRepository,而RegionRepository应该提供急于加载郊区的可能性。按需办公。