ASP.NET MVC中View和PartialView有什么区别?

41

在ASP.NET MVC中,View和PartialView有什么区别?

乍一看,我不明白为什么两者都需要。

7个回答

43

理论上,答案是:部分视图是您在主视图中嵌入的“子视图” - 您可能会在多个视图中重复使用的内容,例如侧边栏。

实践上,答案是:非常少。

从理论上讲,部分视图比标准视图更轻量级,但是向RenderPartial传递“常规”视图也完全可以,并且性能似乎完全相同。 我经常将常规.aspx视图用作“部分”视图,因为您可以使它们引用主视图以提供模板化的内容,就像在ASP.NET WebForms中使用UserControls一样。 参见此处

部分视图更像门户上的Web部件 - 它们是完全自包含的对象。 如果布局简单且静态,或者如果您对没有在标准视图中使用<html><body>标记时出现的智能感知错误感到烦恼,则使用它们。


返回 View() 和返回 PartialView(),在我看来似乎没有任何区别。 - Omu

11

它的工作原理如下:

  • return View() 视图内容放在 /Shared/_Layout.cshtml 的 @RenderBody() 中

  • return PartialView() 仅返回视图内容


6

视图是页面显示的一般结果。它是除主控页之外的最高级容器。而部分视图是指可在不同页面上重复使用或在同一页面中多次使用的小型内容。

如果您来自WebForms,视图类似于Web内容表单,而部分视图则类似于用户控件。


3

如果你来自WebForms背景,可以将PartialView视为用户控件。


3

看看StackOverflow.com网站:

  • 标签
  • 相关
  • 广告

因此,标签、相关、广告等可以作为PartialViews组成。这样做的好处是,PartialViews可以简单地通过OutputCache进行缓存,而不是重新创建整个网站:提高性能。


2
但是,你可以想象一个系统,它只需使“视图”包含“视图”,从而避免了需要额外的类型? - Ben Aston
包含其他视图的视图非常方便。这取决于您,您可以选择一个大视图还是一个由较小视图组成的视图集合。所有部分视图都应该独立于其他视图,并且可以具有其他类型的返回值。 - Dariusz

2
考虑将PartialView视为WebForms中的控件,其思想是可以重复使用该部分内容。

0

在 Core Mvc 中查看

  • 视图包含布局页面(_ViewStart)或布局属性。

@{ Layout="_Layout"; }

  • 在任何视图呈现之前,都会呈现 _ViewStart。
  • 视图可能具有标记,如
<!DOCTYPE html>   
 <html>
     <head>
     </head>
     <body>    
     </body> 
  </html>
  • 视图不像部分视图那样轻量级。
  • 视图将通过使用@RenderBody()方法在布局中呈现(Views/Shared/_Layout.cshtml)。
  • 通过在操作内使用return View()进行调用。

局部视图

  • 局部视图不包含布局页面布局属性
  • 它不会验证viewstart.cshtml。我们无法将局部视图的公共代码放在viewStart.cshtml页面中。
  • 在MVC中,局部视图是专门设计用于在视图内呈现。
  • 我们可以将常规视图传递给RenderPartial方法。
@{await Html.PartialAsync("Partial"); }

演示局部视图的强类型示例

in View

@model List<Student>;
@{
    Layout = "_Layout";
}  
 
<div>@await Html.PartialAsync("Partial",Model)</div>

in Partial View

@model List<Student>; <ul>
     @foreach (Student student in Model)
     {
        <li>@student.ID</li>
        <li>@student.Name</li>
        <li>@student.Age</li>
     }
 
     </ul>
  • ASP.NET Core MVC 与普通视图(即在 Views/ 和 Views/Shared 文件夹中)一样查找部分视图。这意味着您可以创建特定于控制器的部分视图或共享部分视图。

    祝好运


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接