• ASP.NET MVC中的Razor语法


    1.Razor的基本语法

    @* 多行代码时需要包含在大括号内{}和每句代码后都需要加分号; *@
    @{
        ViewBag.Title = "Index";
        ViewBag.Name = "Linq";
        ViewBag.IsOk = false;
        List<string> list = new List<string>() { "11", "22", "33", "44", "55", "66" };
        ViewBag.Description = "<span style='font-weight: bold;'>迷失之牙</span>";
    }
    @* 单行代码时不需要分号结束 *@
    <p>@DateTime.Now</p>
    
    <p>
        名称:@("欢迎," + ViewBag.Name)
        状态:@(ViewBag.IsOk ? "是" : "否")
        @@Linq
    </p>
    
    @if (ViewBag.IsOk != null && ViewBag.IsOk)
    {
        @:启用
    }
    else
    {
        @:停用
    }
    
    @if (ViewBag.IsOk != null && ViewBag.IsOk)
    {
        <span>1.启用</span>
    }
    else
    {
        <span>2.停用</span>
    }
    
    @if (ViewBag.IsOk != null && ViewBag.IsOk)
    {
        <text>
        1234567
        <span>1. 启用</span>
        </text>
    }
    else
    {
        <text>
        1234567
        <span>2. 停用</span>
        </text>
    }
    
    <ul>
        @foreach (var item in list)
        {
            <li>@item</li>
        }
    </ul>
    @* 所有Razor语法输出的变量都会被HTML编码(HTMLEncode)后输出,如果想里面的HTML标签生效要调用Html.Raw方法 *@
    @ViewBag.Description
    @Html.Raw(ViewBag.Description)
    
    @{
        <h2>混合例子 @(ViewBag.Name)</h2>
        foreach (var item in list)
        {
            <li>@item</li>
        }
        
    }

    2.Razor的主板页面框架

    2.1 Razor页面执行顺序
    Controller回传给ViewResult给MvcHandler之后,MvcHandler会先设法找出对应的检视页面,然后Razor页面执行生命周期
    被MvcHandler找到Razor页面会优先执行,然后检查这个View页面是否有Layout属性


    2.2 关于_ViewStart
    2.2.1/View/_ViewStart.cshtml文件会在/View/目录下任何View被截入前就先被截入,任何与Controller同名的View子目录下也能出现相同的_ViewStart.cshtml如此一来就可以不同的Controller对应不同的_ViewStart.cshtml


    2.3 _Layout布局页面
    2.3.1 _Layout.cshtml和一般的Razor的检视页面差不多,不同的地方是有2个Razor语法,分别是@RenderBody(预设坑洞)与@RenderSection(具名坑洞)

    3.@helper辅助方法 

    Razor提供了一种很方便的语法,让你可以将View页面中部分内容或部分代码抽取出来,变成一个独立的辅助方法

    <p>@ShowTime() </p>
    @helper ShowTime()
    {
        @DateTime.Now;
    }

    4.@functions自定义函数

    在@helper无法自定义属性,自能单纯地传入参数,然后格式化你想要呈现的样子直接输出。所以Razor还提供@functions自定义函数功能

    <p>@ShowTime() </p>
    @functions{
    public IHtmlString ShowTime()
    {
        return  new HtmlString(DateTime.Now.ToString());
    }
    }

    5.@using引用参考资料类别

    在Razor页面里面可以在页面最上方通过@using引用这一个View页面里面会用到的命名空间

    @using MvcApplication1.Models
        <pages
            validateRequest="false"
            pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
            pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
            userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
          <controls>
            <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
          </controls>
          <namespaces>
            <!--也可以配置在配置文件里面-->
            <add namespace="MvcApplication1.Models"/>
          </namespaces>
        </pages>

    6.@model引用参考资料型别

            public ActionResult Index()
            {
                List<User> list = new List<User>();
                list.Add(new User() { Name="11",Age=11});
                list.Add(new User() { Name = "12", Age = 12 });
                list.Add(new User() { Name = "13", Age = 13 });
                return View(list);
            }
    @using MvcApplication1.Models
    
    @{
        var data = (IEnumerable<User>)Model;
    }
    <ul>
        @foreach (var item in data)
        {
            <li>@item.Name</li>
        }
    </ul>
    @using MvcApplication1.Models
    @model IEnumerable<User>
    <ul>
        @foreach (var item in Model)
        {
            <li>@item.Name</li>
        }
    </ul>

     7.布局页

    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>@ViewBag.Title</title>
    </head>
    <body>
        <div id="header">
            @if (IsSectionDefined("header"))
            {
                @RenderSection("header", false)
            }
            else
            {
                <h1>没有填充@RenderSection("header", false)</h1>
            }
        </div>
        <div>
            @Html.Partial("_LayoutUser")
        </div>
        <div>
            @RenderBody()
        </div>
        <div id="footer">
            @RenderSection("footer",false)
        </div>
    
    </body>
    </html>
    @{
        ViewBag.Title = "About";
        Layout = "~/Views/Shared/_LayoutTest.cshtml";
    }
    
    <h1>我是@RenderBody()</h1>
    
    @section footer {
        <h1>我是@RenderSection("footer",false)</h1>
    }
  • 相关阅读:
    nodejs 获取客户端 ip 地址
    如何使用 nvm-windows 管理 nodejs 版本
    redis 环境搭建
    利用 ssh 传输文件
    如何在 Centos7 中安装 gcc
    如何在 Centos7 中安装 nginx
    django迁移model到别的app中
    ssl生成证书
    pip安装mysql报错 ld: library not found for -lssl
    mac重置蓝牙模块
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/5487894.html
Copyright © 2020-2023  润新知