网站链接: 我爱捣鼓
当前位置: 首页 > web开发  > MVC

实例让你快速掌握ASP.NET MVC中的Razor基本语法

2021/3/4 22:06:18

1.Razor的基本语法@* 多行代码时需要包含在大括号内{}和每句代码后都需要加分号; *@@{ ViewBag.Title = "Index"; ViewBag.Name = "Linq"; ViewBag.IsOk = false; List<string> list = new List<string>() { "11",…


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>
}




相关资讯

  • C#如何实现图片马赛克效果处理?

    我们经常会看到图片上面打上马赛克,一般人都会想到ps,如果通过C#程序如何实现了,可以看看下面的源码:using System.Drawing;using System.Drawing.Imaging;using System.Web.Mvc; namespace MVC2017_Sample.Controllers{ public class DefaultController : Control…

    2021/3/4 21:55:08
  • mvc中如何将控制器的数据赋值给视图的js对象json?

    mvc中如何将控制器的数据赋值给视图的js对象,其实非常简单,话不多说,直接看源码吧!cshtml页面@{ Layout = null;} <!DOCTYPE html><html><head> <meta name="viewport" content="width=device-width" /> <ti…

    2021/3/4 21:51:09