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返回方法。

posted @ 2017-01-21 11:40  devilyouwei  阅读(462)  评论(0编辑  收藏  举报