仍然是asp.net和MVC3的新手我一直在网上积极学习如何使用经典ASP实现的方法。直到现在,我能够在控制器中基于linq查询进行单声道视图。我的问题是在一个典型的Web应用程序主页中,您正在显示源自不同查询的不同内容,如何在MVC3中实现。我的问题可能听起来很愚蠢,但这是我现在面临的唯一障碍。到目前为止,我使用经典的ASP包含文件来组织我页面中的内容。我听到了部分观点,但不确定这是否可行。如果你能帮我举个例子,说明如何在主页上显示不同内容的两个视图。例如,主要部分显示来自commentscontroller的最近评论的视图,而侧面部分显示来自新闻控制器的最近新闻标题的视图。如果你能指出我正确的方向,也将受到赞赏。我知道我自己有很多需要学习的东西,但有时专家的指导可以为你节省数周的学习时间。
答案 0 :(得分:1)
如果要使用单独的视图呈现不同(不相关)的内容,ASP.NET MVC中有两个选项:
在第一种情况下,我们在一个动作中收集所有数据(例如HomeController.Index()
),将聚合视图模型对象传递给视图,然后从视图中调用RenderPartial
,传入数据:
<div id="comments">
@Html.RenderPartial("Comments", Model.Comments)
</div>
<div>
@Html.RenderPartial("News", Model.Headlines)
</div>
请注意,视图模型已包含Model.Comments
和Model.Headlines
中的所有数据,我们只是将其传递给不同的局部视图进行渲染。
这种方法的缺点是HomeController正在努力获取最新的评论和最新的新闻标题。在面向对象的代码中,我们通常希望将这些问题分开。在这种情况下,我们应该分离获取评论和新闻标题的逻辑。
在第二种情况下,ASP.NET MVC为我们提供了一个开箱即用的解决方案,即从视图中调用RenderAction(action, controller)
。这将调用单独的控制器来提供输出:
<div>
@Html.RenderAction("Latest", "Comments")
</div>
<div>
@Html.RenderAction("Headlines", "News")
</div>
现在我们分别调用CommentsController
和NewsController
来呈现部分视图结果。我们已经有效地将提取评论和新闻标题的关注分离为单独的控制器。 HomeController
不再需要将数据提供给我们的主页视图。
为此,您通过RenderAction调用的操作最好返回PartialViewResult
:
public PartialViewResult Headlines( )
{
string[] headlines = ...;
return PartialView("Headlines", headlines);
}
答案 1 :(得分:0)
没有比http://mvcmusicstore.codeplex.com/更好的学习基础知识的资源,它包含所有代码示例,指令和特定功能如何工作的良好描述。您可能对涉及布局和部分视图的第10章最感兴趣