ASP.NET MVC ViewResult与PartialViewResult

Cap*_*ble 57 asp.net asp.net-mvc

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

veg*_*rby 52

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

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

和行动

public ActionResult MyAction() 
{
    return PartialView("SomeView");
}
Run Code Online (Sandbox Code Playgroud)

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

<div>
   <%= DateTime.Now.ToString() %>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 重要的一点是关于母版页的问题.使用PartialViewResult时,您通常只想返回一大块标记,而不是返回带有DOCTYPE,<html>标记,脚本引用等的整个页面.它在Ajax场景中非常有用. (29认同)
  • 我会说:主要是语义学.如果你检查Codeplex源,你将继承ViewResultBase,主要区别是ViewResult支持指定母版页,PartialViewResult不支持 (10认同)
  • 但为什么需要呢?您可以使用常规视图("SomeView")轻松返回用户控件吗? (6认同)

ano*_*ous 30

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

实际上,您将使用PartialViewResult输出视图的一小部分.这就是为什么在处理它们时没有母版页选项的原因.另一方面,您将使用ViewResult获取"完整"视图.正如您所料,Controller类公开了几种方法,可以减少为即时执行这些类型的操作结果所需的输入量.

一般来说,ViewResult用于呈现具有可选主控的页面,而PartialViewResult用于用户控件(可能响应AJAX请求).


Spo*_*man 19

现有的答案都没有真正回答"有什么不同"的问题.

差异如下:

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

  • 对于ViewResult,它位于ViewLocationFormats和MasterLocationFormats中
  • 对于PartialViewResult,它位于PartialViewLocationFormats中

2)ViewResult具有附加属性MasterName

就这些.

  • 有趣的是,您在 5 年后回答了这个问题,而我在 2 年后又增加了一个赞成票。 (2认同)

Dan*_*y G 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而不是单独处理数据点.它的意思是会有更多的内容流入管道.但是,权衡更容易阅读和维护代码.