【问题标题】:View() vs. PartialView()View() 与 PartialView()
【发布时间】:2010-11-17 23:08:36
【问题描述】:

View() 方法可以加载部分视图。

View()PartialView()的区别是View()可以加载视图和部分视图,PartialView()只能加载部分视图吗?

【问题讨论】:

  • 这是绕口令吗?
  • @Lorenzo 如果 PartialView 可以查看视图,PartialView 将查看多少视图?请不偏不倚,我想听听你的看法:PartialView 会查看 Views 还是只是一个偏于 Partial 的 View?

标签: asp.net-mvc


【解决方案1】:

由视图引擎决定是否要处理与常规视图不同的部分视图。

例如,在 WebFormViewEngine 中没有区别。

在新的 ASP.NET MVC 3 RazorViewEngine 中存在一些差异。只有常规视图才会运行“_viewstart.cshtml”页面,因为它们用于诸如设置布局页面之类的事情。

【讨论】:

  • Viewstart 支持和布局支持(分别)加上小的异常差异:completedevelopment.blogspot.com/2014/01/…
  • 此外,我认为PartialView() 将查找在您的 ViewEngine 的 PartialViewLocationFormats 属性中指定的视图位置,View() 将使用 ViewLocationFormats 属性。
  • @MaksimVi。这是正确的,除了在 MVC 的默认视图引擎中,局部视图和“常规”视图之间的位置都是相同的。但是,如果您以不同方式配置它们或使用不同的视图引擎,它们肯定会有所不同。
【解决方案2】:

我认为最大的区别在于_Layout页面的使用:

  • PartialView():razor 引擎将获取没有任何布局页面 (_layout.cshtml) 的视图(例如 index.cshtml)。
  • View():引擎将获取您的视图(例如 index.cshtml),然后将该视图的内容附加到布局页面(_layout.cshtml)中

【讨论】:

  • +1 因为这确实是 IMO 最重要的事实!尝试使用例如@Html.Action("SideMenu", "Menu") 这样:public ActionResult SideMenu() { return View(); }。你会想知道为什么它会渲染到_LayoutRenderBody()。而是返回PartialView(),因为它不是通过RenderBody() 渲染到_Layout
【解决方案3】:

如果您有 Index.aspxIndex.ascx 用于具有这两种方法的同一控制器可能有助于消除歧义。但我同意一般View 更常用。而且PartialView也可以用来加载全视图,只是语义错误。

【讨论】:

  • 我很确定 WebFormViewEngine 对常规视图和局部视图使用完全相同的文件扩展名,因此这可能无法帮助您消除歧义。
  • Eilon 不正确。部分视图是 .ascx,视图是 .aspx
  • @Chevex 如果您查看 WebFormViewEngine 的 ViewLocationFormatsPartialViewLocationFormats 集合,您会发现它们是相同的。虽然惯例是将 .aspx 用于完整视图,将 .ascx 用于部分视图,但视图引擎对它们的处理方式相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多