现在的asp.net网站开发中用master模板还是比较多的,毕竟它跟原来的asp.net用法接近,学习成本很低,而且作为页面布局也够了。它最大的问题可能就是灵活性了,随着MVC的流行,razor模板大有取代master的趋势。razor提供了更灵活的写法,也使一般前端页面有更方便的调用后台代码的功能,大有超越code behind,回归asp时代的感觉,是微软网站开发技术的否定之否定。
razor页面的调用逻辑
在采用razor作为模板技术的网页中,默认的在View文件夹内有一个_ViewStart.cshtml文件(这个cshtml扩展名非常有意思,“c sharp html”可以使用c#编程语言的html文档,这个html绝对牛b),这个文件就是网页的默认模版,在这个网站的所有页面不用任何声明就是以该文件作为模版而创建的。顺便说一下,如果不希望用默认的模板怎么办呢?在页面上写上以下类似语句:Layout = "~/Views/Shared/_GreenLayout.cshtml"
模版是作为公共部分而存在的,那么特殊部分是如何引入的呢?
- RenderBody
在_ViewStart.cshtml中有个@RenderBody(),这个代码的意思,该网页的主体部分就由这个语句引入,在模版页面里该代码只能使用一次,并且不用参数。但是一个模板只能有一个部分可以由外部引入,那太不灵活了,估计就没人会有兴趣用,master模板都比它强多了,所以@RenderSection就出来补充它了。
- RenderSection
RenderSection是_ViewStart.cshtml模版中的占位符,哪里需要内容,就在哪里出现,跟RenderBody不同的是,它是需要参数的如@RenderSection("Menu")——在这个地方插入一个菜单,而且是必须的(默认是必须的),引用该模版的页面如果没有的话就会报错。当然如果不是必须的,那就应该这样写@RenderSection("Menu",false),意思就是说,你看着办吧。
- RenderPage
RenderPage顾名思义是引入一个页面,使用的方式如@RenderPage(“~/Views/Shared/_Header.cshtml”),看起来没什么难度。
- Html.Partial
三个看起来很像的Render兄弟之外,razor还提供了另一个引入其他页面的方法Html.Partial,如 @Html.Partial("_ExternalLoginsListPartial", new { Action = "ExternalLogin", ReturnUrl = ViewBag.ReturnUrl })这样的存在,看起来很高大上。
看完了这四个类似的方法确实解决了页面特殊部分的引入问题,但是这四者的区别在哪里呢?且听下回分解。