ASP.NET MVC的ViewResult与PartialViewResult

控制器结果命名ViewResultPartialViewResult之间有什么区别? 更重要的是什么时候使用了PartialViewResult

PartialViewResult被用来渲染一个partialview(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> 

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

实际上,您将使用PartialViewResult来输出一小部分视图。 这就是为什么你没有处理它们的母版页选项。 另一方面,您将使用ViewResult获取“完整”视图。 正如你所期望的那样,Controller类公开了几个方法,这些方法可以减less瞬间执行这些types的操作结果所需的input量。

一般来说,ViewResult是用可选的母版来渲染一个页面,PartialViewResult用于用户控件(可能是响应一个AJAX请求)。

现有的答案都没有回答“有什么不同”的问题。

差异如下:

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

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

2)ViewResult具有附加属性MasterName

就这些。

有几种情况下,你会想把你的看法分解成几个小的组件。 我现在正在使用的一个用例是,我有一个多语言站点,我想用AJAX原理重新加载内容。

通常我会在非多语言站点的情况下做的是创build另一个ActionResult返回正在改变与新参数的ViewModel。 我喜欢使用我称之为JsonpResult的自定义ActionResult。 问题在于我的标签不在我的数据库中,而是在资源文件中。 所以我需要做的是以某种方式将我的资源文件数据保存到ViewModel中。

一旦数据传递到pipe道,我的AJAXcallback处理视图模型响应使用Javascript(我使用jQuery)回到HTML页面的接线。

这绝对有效,但它成为可维护性的问题。 我现在不仅需要维护原始的ASP.NET视图,还需要维护一组处理AJAX行为的脚本。 如果你需要有你的网站SEO,那么你真的需要确保服务器端和客户端行为都工作相同。

这是部分视图为我所用。 我所做的是“拉出”发生大量重载的逻辑数据部分。 PartialView的好处在于,您可以将ViewData和Model传递给PartialView。 如果您的PartialView是针对ViewModel的强types,则可以使用Intellisense来帮助PartialView的布线。

现在,我所需要做的就是将响应写回单个DIV,而不是单独处理数据点。 它意味着会有更多的内容来自pipe道。 但是,权衡更容易阅读和维护代码。

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