在上一篇我罗列了razor模板中四种替换方法,分别是RenderBody,RenderSection,RenderPage与Html.Partial,但是这看起来实现了相似功能的东西,其区别在哪里?今天这篇就以这个主题来讲讲。
- RenderBody
RenderBody主要是实现模版页面也内容页面的合体,所以不用任何参数,就这个用。如我们访问index页面,那么就把index.cshtml与_ViewStart.cshtml合起来,用index.cshtml里面的内容来替代@RenderBody的部分。
- RenderSection
RenderBody在一个布局页面里只能出现一次,所以有很多时候都是不过瘾的,因为我们有更多的内容需要替换,就出现了RenderSection。具体的用法就不说了,但是要注意一旦定义了Section,那么在内容页面就要有这么一个节@section SectionName { //todo },否则在RenderSection的时候要增加一个参数,表示不一定要有这个section,具体上一篇中已经提到过了。
- RenderPage
RenderBody与RenderSection里面的内容都是放在内容页面里面的,也就是他们都在同一个cshtml中,但是有时候我们需要引入第三个文件,甚至这第三个文件还可以根据调用的参数的不同呈现出不同的形态,这个时候RenderPage就出现了。简单点的就这么用@RenderPage(“~/Views/Shared/_Header.cshtml”) ,复杂点的带参数的用法@RenderPage(“~/Views/Shared/_Header.cshtml”,new{parm="my",parm2="you") ,在接受页面里可以这样来接受参数@PageData["param"]。
- Html.Partial
在我写这一段的时候,我发现了Html下面还有很多类似的方法,如RenderPartial,RenderAction。这里有Render与没有Render的区别大概在于没有Render的一般用于静态的东西,它会把内容在内存中做一下缓存。
RenderPage与RenderPartial的区别大概在于RenderPage调用的页面只能使用其传递过去的数据。而RenderPartial是可以使用viewdata、model等数据的。
Html.RenderPartial和Html.RenderAction的区别在于:Html.RenderPartial适合用在重复使用的UserControl,并且只需要透过Model来呈现内容。Html.RenderAction则会先去呼叫Controller的Action方法,如果此UserControl是需要透过资料库取得资料来呈现(透过Action来读取资料库),此时会比较适合使用此方式。
通过这上下两篇,我们主要是把razor里面模板替换的各种方法解析了一下,但是对于razor的整体的语法还是没有提到,这里就简单地抄一下w3chtml上的内容。
C# 的主要 Razor 语法规则:
Razor 代码封装于 @{ ... } 中行内表达式(变量和函数)以 @ 开头代码语句以分号结尾字符串由引号包围C# 代码对大小写敏感C# 文件的扩展名是 .cshtml
例子:
单行代码块:@{ var myMessage = "Hello World"; }
行内表达式或变量:<p>The value of myMessage is: @myMessage</p>
多行语句代码块:
@{
var greeting = "Welcome to our site!";
var weekDay = DateTime.Now.DayOfWeek;
var greetingMessage = greeting + " Here in Huston it is: " + weekDay;
}
<p>The greeting is: @greetingMessage</p>
上述网站对razor的用法什么的还是讲得很详细,所以关于razor的其他内容就不在赘述了。下一步是进入到MVC的内部的时候了,不过MVC5里用了bootstrap,如果不了解好像也不够意思,有时间也讲讲。