实际上我正在做一个只有一个名为Index()的动作的主页,它返回视图Index.ascx。
此索引页面将由最新消息和最新注册用户组成,我认为创建两个部分视图是最好的想法(这样我可以在其他视图中使用它)。
对于另一方面,我有一个数据访问类,它调用数据库获取东西(获取最新消息,获取最后用户等...)
我的问题很简单,我应该在HomeController的Index()操作中调用此数据访问类,并将所获得的数据添加到ViewData中吗?
我认为这个index()动作不应该负责将这些数据传递给部分视图,对吗?
你可以帮个忙吗? 我太乱了? ; - )提前致谢。
最诚挚的问候。
何
答案 0 :(得分:4)
您应该使用Repository模式封装数据访问并将其与Logic / UI分开。 Index()方法的控制器应该访问存储库并从那里接收数据。
学习ASP.NET MVC的一个很好的教程就是这个:NerdDinner。在那里,也解释了存储库类的用法。
[更新]一个更好的教程是官方ASP.NET MVC Music Store Step-by-Step Tutorial。
通过使用存储库,您可以获得其他优势,例如依赖注入的可能性,这是对可测试性的极大增强......
答案 1 :(得分:3)
我建议您使用操作方法来控制显示内容,而不是显示内容。
我想说将数据访问逻辑封装在一个层中,以便它与控制器操作松散耦合。
这导致'更薄的动作和更粗略的模型'。您可能希望使用 in Scotts blog所述的存储库模式,或遵循Domain Driven Design来说明每个层的责任。
希望这有帮助。
谢谢, 维杰
答案 2 :(得分:1)
您认为将新闻和用户列表分成局部视图是理想的,因为您可以在其他部分重复使用它们。
将这些数据函数分离成一个单独的类通常调用存储库类也是理想的。所以你可能有一个新闻库类,里面有一个GetNews函数。然后,您可以从新闻列表中调用该功能。在您想要获取这些列表的任何其他地方,您只需调用该函数,而不是再次编写相同的数据检索代码。