名为ViewResult
和的控制器结果有什么区别PartialViewResult
?更重要的是,何时PartialViewResult
使用?
PartialViewResult用于渲染部分视图(fx.只是用户控件).这对于AJAX的东西来说非常好玩,即
和行动
public ActionResult MyAction() { return PartialView("SomeView"); }
其中SomeView是MVC用户控件,例如:
<%= DateTime.Now.ToString() %>
http://msmvps.com/blogs/luisabreu/archive/2008/09/16/the-mvc-platform-action-result-views.aspx
实际上,您将使用PartialViewResult输出视图的一小部分.这就是为什么在处理它们时没有母版页选项的原因.另一方面,您将使用ViewResult获取"完整"视图.正如您所料,Controller类公开了几种方法,可以减少为即时执行这些类型的操作结果所需的输入量.
一般来说,ViewResult用于呈现具有可选主控的页面,而PartialViewResult用于用户控件(可能响应AJAX请求).
现有的答案都没有真正回答"有什么不同"的问题.
差异如下:
1)视图引擎将尝试查找视图的位置:
对于ViewResult,它位于ViewLocationFormats和MasterLocationFormats中
对于PartialViewResult,它位于PartialViewLocationFormats中
2)ViewResult具有附加属性MasterName
就这些.
在某些情况下,您可能希望将视图分解为几个小组件.我正在使用的一个用例是,我有一个多语言网站,我想使用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而不是单独处理数据点.它的意思是会有更多的内容流入管道.但是,权衡更容易阅读和维护代码.