Razor代码复用

  上一篇博客中讲解了Razor语法,在这一篇博文中,我会和大家共同学习在Razor中如何复用代码。

1.布局(Layout)复用

  Layout的使用,就像WebForm的模板页一样,甚至会更加简单,更加方便和明了。

  要使用Layout,首先要在模板页相应的位置添加@RenderBody()方法:

<!DOCTYPE html>

<html lang="en">
    <head>
        <meta charset="utf-8"/>
        <title>测试网站 - @Page.Title</title>
    </head>
    <body>
        @RenderBody()
    </body>
</html>

  在要使用模板页的页面中,指定所使用的模板页:

@{
    Layout = "/LayoutPage.cshtml";
    Page.Title = "第一个子页面";
}

<p>This is a layout test</p>

  Layout的加载顺序不同于模板页,它是先加载子页,然后再加载布局页的。

2.页面(Page)复用

  在Razor中,我们可以轻松的在页面中输出另一个页面的HTML代码:

<p>
    @RenderPage("/SubPage.cshtml")
</p>

  SubPage的代码如下:

<font color="red">这是一个子页面</font>

3.Section

  Section是在布局页(Layout Page)中使用的东西,在使用了布局页的子页面中定义Section的内容,布局页才能够使用。如果Page1.cshtml页面使用了布局页Layout.cshtml,那么,我们可以在Page1.cshtml中定义Section:

@section header{
    <b>Header Section</b>
}

@section footer{
    <b>footer Section</b>
}

  Layout.cshtml的代码:

<body>
        @RenderSection("header");

        @RenderBody()

        @RenderSection("footer");
    </body>

  需要说明一点,虽然没有找到相应的文档,但我在测试的时候,只发现了这一种用法……

4.Helper复用

  Helper是用来简化代码编写的,通常用来处理输出。例如,我们可以为一个模型构建一个Helper,用来处理该模型的Html输出;再比如,我们为系统菜单创建一个Helper,方便我们使用。

  定义Helper,需要使用@helper标记,在该标记后面添加名称和相应的代码:

@helper MenuEx(params string[] strs){
    <ul>
        @foreach(string str in strs){
            <li>@str</li>
        }
    </ul>
}

  这种写法非常类似与类的静态方法,在这个MenuEx中,需要传递字符串数组作为参数。

  另外,我们通常会把一类Helper放在一个cshtml文件中,这个文件名就相当于类名。例如MenuEx放在文件 HelperEx.cshtml文件中,在Page1.cshtml中的使用方法如下:

<p>
    @HelperEx.MenuEx("Microsoft", "IBM", "Apple", "Google")
</p>

  这是我们自定义的内容,另外,系统还为我们提供了一些列的Helper,用来简化Html的书写。这些Helper放在@Html中,我们可以方便的使用:

<p>
    @Html.TextBox("txtName")
</p>

  OK,本节就讲到这里,更多的学习内容,敬请关注!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Castle DynamicProxy基本用法(AOP)

    本文介绍AOP编程的基本概念、Castle DynamicProxy(DP)的基本用法,使用第三方扩展实现对异步(async)的支持,结合Autofac演示如何...

    thz
  • JsonPath基本用法

    本文主要介绍JsonPath的基本语法,并演示如何在Newtonsoft.Json中进行使用。

    thz
  • 03-EF Core笔记之查询数据

    微软提供了一百多个示例来演示查询,地址:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

    thz
  • 1 当我们谈论瀑布和敏捷的时候,究竟在说什么?-人人都是项目经理系列(全13篇)

    PMI全称Project Management Institute,中文名叫《项目管理协会》。成立于1969年,是全球领先的项目管理行业的倡导者,它创造性地制定...

    放牛的星星
  • 项目经理思维导图——13 如何在全新的创业公司下创建项目管理流程,有哪些项目管理标准规范可以参与?

    yeedomliu
  • 10分钟教你用Python打造学生成绩管理系统

    大家好,这学期上了Python这门课,然后结课的时候老师要求做一个这样的学生管理系统。自己按照老师的要求写了一下,今天就把这个小程序分享出来吧~供Python新...

    短短的路走走停停
  • 聊聊reactive streams的parallel flux

    本文主要研究下reactive streams的flux的parallel运行方式.

    codecraft
  • 第11章 Spring Boot应用监控第11章 Spring Boot应用监控小结

    在实际的生产系统中,我们怎样知道我们的应用运行良好呢?我们往往需要对系统实际运行的情况(各种cpu,io,disk,db,业务功能等指标)进行监控运维。这需要耗...

    一个会写诗的程序员
  • 机器学习实践中应避免的七种常见错误

    摘要:在机器学习领域,每个给定的建模问题都存在几十种解法,本文作者认为,模型算法的假设并不一定适用于手头的数据;在追求模型最佳性能时,重要的是选择适合数据集(尤...

    用户1332428
  • Github 项目推荐 | 用 Pytorch 实现的 WaveNet-Vocoder

    本库是用 Pytorch 实现的 WaveNet-Vocoder。 ? 安装需求: cuda 8.0 python 3.6 virtualenv 推荐使用内存大...

    AI研习社

扫码关注云+社区

领取腾讯云代金券