【问题标题】:Passing nested data from Controller to View in ASP.Net MVC (LINQ)在 ASP.Net MVC (LINQ) 中将嵌套数据从控制器传递到视图
【发布时间】:2010-01-15 08:34:01
【问题描述】:

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

(伪代码)

foreach(Region currentRegion in Regions) { 显示区域的标题 foreach(Office currentOffice in all Offices WHICH BELONG TO SUBURBS WHICH BELONG TO THE REGION TO THE REGION) { 显示办公室名称 } }

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

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

理想情况下,我希望在 Controller 中组装所有数据,这样我就不会得到一些与 Controller 职责等重叠的混乱视图。

【问题讨论】:

  • 您能否更具体地了解这些数据的格式、保存位置以及检索方式?

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


【解决方案1】:

在你的情况下,

  • 我会创建视图模型类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 中查看?”问题的回答。事情是 - 你的模型还不适合这个(区域类不直接与郊区、郊区和办公室绑定)。

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

【讨论】:

  • 嗨阿尼斯!谢谢你的回答。虽然我确信 Spark 和 AutoMapper 是很棒的附加组件,但我很想知道在这个阶段如何使用纯/原始 ASP.Net MVC 来完成。在我去学习更多的课程/附加组件等之前,我想首先获得我在这个领域的知识。我发现,你在解决方案中添加的附加组件越多,通常最终会增加维护开销在 2-3 年内,当您的部分解决方案升级时,突然之间,一些附加组件可能不受支持或不再兼容等。
  • 不会有太大变化 - 视图的语法会更加冗长,映射将通过构造函数或对象初始化器创建视图模型来完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 2011-02-11
  • 1970-01-01
  • 2016-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多