【发布时间】:2009-01-23 13:57:59
【问题描述】:
名为ViewResult 和PartialViewResult 的控制器结果有什么区别?更重要的是,PartialViewResult 什么时候使用?
【问题讨论】:
标签: asp.net asp.net-mvc
名为ViewResult 和PartialViewResult 的控制器结果有什么区别?更重要的是,PartialViewResult 什么时候使用?
【问题讨论】:
标签: asp.net asp.net-mvc
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>
【讨论】:
http://msmvps.com/blogs/luisabreu/archive/2008/09/16/the-mvc-platform-action-result-views.aspx
在实践中,您将使用 PartialViewResult 用于输出 视图的一小部分。这就是为什么你 没有母版页选项 与他们打交道时。在另一 手,您将使用 ViewResult 获得“完整”视图。正如你 可能期望,Controller 类 公开了几种方法,可以让 你减少了打字量 需要即时这些类型的 行动结果。
一般来说,ViewResult 用于渲染带有可选 master 的页面,PartialViewResult 用于用户控件(可能响应 AJAX 请求)。
【讨论】:
现有答案都没有真正回答“有什么区别”这个问题。
区别如下:
1) 视图引擎将尝试查找视图的位置:
2) ViewResult 具有附加属性 MasterName
仅此而已。
【讨论】:
在某些情况下,您希望将视图分解为几个小组件。我现在正在使用的一个用例是,我有一个多语言网站,我想使用 AJAX 原则重新加载内容。
对于非多语言网站,我通常会创建另一个 ActionResult 以返回随新参数而变化的 ViewModel。我喜欢使用我称之为 JsonpResult 的自定义 ActionResult。问题在于我的标签不在我的数据库中,而是在资源文件中。所以我需要做的是以某种方式将我的资源文件数据合并到 ViewModel 中。
一旦数据通过管道传输,我的 AJAX 回调会使用 Javascript(我使用 jQuery)将 ViewModel 响应连接回 HTML 页面。
这绝对有效,但它成为可维护性的问题。我现在不仅需要维护我原来的 ASP.NET 视图,还需要维护一组处理 AJAXian 行为的脚本。如果您需要对您的网站进行 SEO,那么您确实需要确保服务器端和客户端的行为都相同。
这就是局部视图对我起作用的地方。我所做的是“拉出”发生大量重新加载的逻辑数据部分。 PartialView 的好处是您可以将 ViewData 和 Model 传递给 PartialView。如果您的 PartialView 是针对您的 ViewModel 进行强类型化的,您可以获得 Intellisense 来帮助连接 PartialView。
现在我对 AJAX 调用所需要做的就是将响应写回单个 DIV,而不是单独处理数据点。这确实意味着会有更多的内容流下来。但是,这种权衡更容易阅读和维护代码。
【讨论】:
主要区别之一是 PartialViewResult 不使用 _ViewStart.cshtml。 _ViewStart.cshtml 文件中的代码在视图中的任何代码之前在渲染开始时执行。
【讨论】: