ASP.Net MVC3在主页视图上组织内容

时间:2011-12-17 23:42:36

标签: asp.net asp.net-mvc-3

仍然是asp.net和MVC3的新手我一直在网上积极学习如何使用经典ASP实现的方法。直到现在,我能够在控制器中基于linq查询进行单声道视图。我的问题是在一个典型的Web应用程序主页中,您正在显示源自不同查询的不同内容,如何在MVC3中实现。我的问题可能听起来很愚蠢,但这是我现在面临的唯一障碍。到目前为止,我使用经典的ASP包含文件来组织我页面中的内容。我听到了部分观点,但不确定这是否可行。如果你能帮我举个例子,说明如何在主页上显示不同内容的两个视图。例如,主要部分显示来自commentscontroller的最近评论的视图,而侧面部分显示来自新闻控制器的最近新闻标题的视图。如果你能指出我正确的方向,也将受到赞赏。我知道我自己有很多需要学习的东西,但有时专家的指导可以为你节省数周的学习时间。

2 个答案:

答案 0 :(得分:1)

如果要使用单独的视图呈现不同(不相关)的内容,ASP.NET MVC中有两个选项:

  1. 的RenderPartial
  2. 的RenderAction
  3. 在第一种情况下,我们在一个动作中收集所有数据(例如HomeController.Index()),将聚合视图模型对象传递给视图,然后从视图中调用RenderPartial,传入数据:

    <div id="comments">
      @Html.RenderPartial("Comments", Model.Comments)
    </div>
    <div>
      @Html.RenderPartial("News", Model.Headlines)
    </div>
    

    请注意,视图模型已包含Model.CommentsModel.Headlines中的所有数据,我们只是将其传递给不同的局部视图进行渲染。

    这种方法的缺点是HomeController正在努力获取最新的评论最新的新闻标题。在面向对象的代码中,我们通常希望将这些问题分开。在这种情况下,我们应该分离获取评论和新闻标题的逻辑。

    在第二种情况下,ASP.NET MVC为我们提供了一个开箱即用的解决方案,即从视图中调用RenderAction(action, controller)。这将调用单独的控制器来提供输出:

    <div>
      @Html.RenderAction("Latest", "Comments")
    </div>
    <div>
      @Html.RenderAction("Headlines", "News")
    </div>
    

    现在我们分别调用CommentsControllerNewsController来呈现部分视图结果。我们已经有效地将提取评论和新闻标题的关注分离为单独的控制器。 HomeController不再需要将数据提供给我们的主页视图。

    为此,您通过RenderAction调用的操作最好返回PartialViewResult

    public PartialViewResult Headlines( )
    {
      string[] headlines = ...;
      return PartialView("Headlines", headlines);
    }
    

答案 1 :(得分:0)

没有比http://mvcmusicstore.codeplex.com/更好的学习基础知识的资源,它包含所有代码示例,指令和特定功能如何工作的良好描述。您可能对涉及布局和部分视图的第10章最感兴趣