名为ViewResult
和PartialViewResult
的控制器结果有何区别?更重要的是,PartialViewResult
何时使用?
答案 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)视图引擎将尝试查找视图的位置:
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文件中的代码在视图中的任何代码之前的渲染开始时执行。