ASP.NET MVC ViewResult与PartialViewResult

时间:2009-01-23 13:58:00

标签: asp.net asp.net-mvc

名为ViewResultPartialViewResult的控制器结果有何区别?更重要的是,PartialViewResult何时使用?

5 个答案:

答案 0 :(得分:52)

PartialViewResult用于渲染部分视图(fx。只是用户控件)。这对于AJAX的东西来说非常好用,即

<script type="text/javascript">
    $.get(
        "/MyController/MyAction",
        null,
        function (data) { $("#target").html(data) }
     );
</script>

和行动

public ActionResult MyAction() 
{
    return PartialView("SomeView");
}

其中SomeView是MVC用户控件,例如:

<div>
   <%= DateTime.Now.ToString() %>
</div>

答案 1 :(得分:30)

http://msmvps.com/blogs/luisabreu/archive/2008/09/16/the-mvc-platform-action-result-views.aspx

  

在实践中,你会使用   PartialViewResult用于输出   视图的一小部分。这就是你的原因   没有母版页选项   在与他们打交道时。在另一   手,你将使用ViewResult   获得“完整”的观点。就像你一样   可能会期待,Controller类   暴露了几种可以让它的方法   你减少了打字的数量   需要立即使用这些类型的   行动结果。

一般来说,ViewResult用于渲染具有可选master的页面,而PartialViewResult用于用户控件(可能响应AJAX请求)。

答案 2 :(得分:19)

现有的答案都没有真正回答问题&#34;有什么区别&#34;。

差异如下:

1)视图引擎将尝试查找视图的位置:

  • for ViewResult,它位于ViewLocationFormats和MasterLocationFormats
  • for PartialViewResult,它位于PartialViewLocationFormats

2)ViewResult具有附加属性MasterName

就是这样。

答案 3 :(得分:7)

在某些情况下,您可能希望将视图分解为几个小组件。我现在正在使用的一个用例是,我有一个多语言网站,我想使用AJAX原则重新加载内容。

通常,在非多语言网站的情况下,我要做的是创建另一个ActionResult来返回使用新参数更改的ViewModel。我喜欢使用我称之为JsonpResult的自定义ActionResult。问题在于我的标签不在我的数据库中而是在资源文件中。所以我需要做的是以某种方式将我的资源文件数据水合成ViewModel。

一旦数据进入管道,我的AJAX回调就会使用Javascript处理将ViewModel响应连接回HTML页面(我使用jQuery)。

这肯定有效,但它成为可维护性的问题。我现在不仅需要维护原始的ASP.NET视图,还需要维护一组处理AJAXian行为的脚本。如果您需要拥有自己的网站搜索引擎优化,那么您确实需要确保服务器端和客户端的行为都是相同的。

这是Partial Views为我发挥作用的地方。我所做的是“拉出”大量重载发生的逻辑数据部分。 PartialView的优点在于您可以将ViewData和Model传递给PartialView。如果您的部分视图是针对ViewModel强类型的,那么您可以使用Intellisense来帮助连接PartialView。

现在我需要对我的AJAX调用做的就是将响应写回单个DIV而不是单独处理数据点。它的意思是会有更多的内容流入管道。但是,权衡更容易阅读和维护代码。

答案 4 :(得分:0)

主要区别之一是PartialViewResult不使用_ViewStart.cshtml。 _ViewStart.cshtml文件中的代码在视图中的任何代码之前的渲染开始时执行。