return View()和PartialView()的区别
序:我想如果在加载部分视图的时候用return view()也许会遇到一些恶心的问题,下面我经过百度解决办法
当我们使用razor作为页面引擎时,它的视图文件扩展名为cshtml或者vbshtml,而之前作为分部视图的ascx文件,进行razor之后,也是cshtml,这与非razor引擎有些不同,在这方面,官方并没有显式把分部视图与标准视图分开,有时,我们在开发时,可能会出现一些混乱了,今天主要来说一下,如何正确的使用分部视图!
分部视图在action中返回一定要用PartialView(),而不要偷懒使用View(),因为,如果你使用View()渲染视图,系统会认为你是一个标准视图,会为你加个默认的母板页(Layout),除非你显式的设置了Layout这个属性。而如果已经在_ViewStart.cshtml中定义了Layout,在使用如下代码:
@*加载公共页眉*@ @{ Html.RenderAction("PageHeader", "Common"); } @*网站主体*@ @RenderBody() @*加载公共页脚*@ @{ Html.RenderAction("PageFooter", "Common"); }
这段代码在_Layout.cshtml中,其中注意视图辅助方法,RenderAction是为了加载动态的视图,请求了Common下的两个方法,后端的CommonController.cs如下:
namespace SunJob.Controllers { public class CommonController : Controller { //页脚页面 [ChildActionOnly] public ActionResult PageFooter() { return PartialView("~/Views/Shared/_PageFooter.cshtml"); } //页眉页面 [ChildActionOnly] public ActionResult PageHeader() { return PartialView("~/Views/Shared/_PageHeader.cshtml"); } } }
注意在需要请求的PageHeader和PageFooter方法最终必须调用PartialView方法,开头已经说明了:既然是Partial页面就应该用PartialView方法,这样MVC就不会使用Layout布局,否则我测试出来会报一个“无限循环的内存溢出”的奇怪错误:
这可折腾了我好久呢,希望注意养成良好习惯,不要混用View和PartialView返回方法。