• Razor语法


    使用Model对象

    首先来看Index.cshtml的第一行:@model WebApplication1.Models.ProductModels

    Razor语句都是以@为开头的。每个视图(View)都有自己的Model属性(通过@Model调用)。上面这句代码的意思是将本视图的Model属性的类型指向MvcApplication1.Models.ProductModels类型,这就实现了强类型。

    视图中的Model属性用于存放控制器(Controller)传递过来的model实例对象(本示例中ProductController通过“return View(myProduct)”传递给Index视图),下面的代码演示了如何调用该model对象:

    @model WebApplication1.Models.ProductModels
    @{
        ViewBag.Title = "Index";
     }
    
    <h2>Index Product</h2>
    @* Model对象 *@
    <h2>@Model.Name</h2>
    <h2>@Model.Description</h2>

    注意,第一行代码用于声名Model属性类型用的是@model <Model类型名>(小写m),而调用控制器传递过来的Model对象用的是@Model.<属性名>(大写M)。调试运行:

    使用表达式

    今天是: @DateTime.Now.ToString("yyyy-MM-dd")
    
    现在是北京时间: @DateTime.Now.ToShortTimeString()

    这种使用对象的简单表达式(@DateTime.Now.ToShortTimeString()和@Model.Name),在这我们不防称之为对象表达式。

    除了对象表达式,还可以是其他任意的有返回值的表达式,如条件表达式。如下面代码所示:

    @(DateTime.Now.Hour < 22 ? "还早,再写一会吧!" : "该睡觉咯!")

    注意,一般使用非对象表达式时都需要用小括号括起来。

    使用代码块

    和表达式的使用方式一样,Razor语法中也可以使用由{}括起来的单个C#过程控制代码块(如if、switch、for等)。使用方式如下:

    @if (Model.Price > 5M)
    {
        string test = "买不起!";
        <p>@Model.Name <b>太贵了!</b> @test </p>
    }

    由{}括起来的代码块内可以写任何C#代码,也可以使用任何HTML标签。但需注意的是,当控制语句内只有一句代码时不能像写C#后台代码一样省略大括号。

    @{
        int num1 = 10;
        int num2 = 5;
        int sum = num1 + num2;
        @(num1+num2);
    }

    @(code)可以使用@sum输出结果,也可以输出一个像上述表达式的运算结果。

    用Razor和html代码混合编写

    在Razor中写html代码和html代码中写Razor语句都是可以的;

    1. 在作用域内如果是以html标签开始则视为文本输出;
    2. 如果要输出@,则使用@@;
    3. 如果要输出非html标签和非Razor语句的代码,则用@:,他的作用是相当于在处于html下面编写一样了,如在@:后面可以加上@就是表示Razor语句的变量;如: 

      @{
          var str = "abc";
          ////下面会输出:this is a mail:dxl0321@qq.com, this is var: abc,this is mail@str,this is @;
          @: this is a mail:dxl0321@qq.com, this is var: @str, this is mail@str,this is @@;
          //下面输出abc
          @str
      }
    4. 使用@:标签在代码块中输出一行不带html标签的文本非常方便,但如果需要在代码块中输出续或不连续的多行纯文本,则使用text标签较为方便,如下代码所示:

      @{
          <text>
          名称:<b>@Model.Name</b><br />
          分类:<b>@Model.Description</b><br />
          价钱:<b>@Model.Price</b><br />
          <pre>
              测试行一: <a>aaaa</a>
              测试行二: @@ fda@aaa
          </pre>
          </text>
      }
      运行结果: 
        

    使用ViewBag与ViewData

    上面讲了通过Model对象来从Controller传递数据到View。和Model对象一样,ViewBag对象也可以用来从Controller传递数据到View。

    ViewData 是一个字典型的(Dictionary),通过key值读取对应的value;ViewBag是动态类型,作用和ViewData一样,都是用来存储信息,有一些不同的是ViewData是object类型,ViewBag是dynamic类型。

    public class ProductController : Controller
        {
            // GET: Product
            public ActionResult Index()
            {
                ViewBag.TestString = "ViewBag这是一行测试文字!";
                ViewData["MessageViewData"] = "ViewData 测试文字。";
                return View();  
            }
        }

    ViewBag在View中的使用方式是和Model一样,如下:

    ViewBag的使用:@ViewBag.TestString
    ViewData的使用: @ViewData["MessageViewData"]

    而dynamic型与object型的区别则是在使用时它会自动根据数据类型转换,而object型则需要我们自己去强制转换。

    在Controller中:

    public ActionResult Index()
            {
                string[] items = new string[] { "one", "two", "three" };
                ViewBag.Items = items;// viewbag是一个新的dynamic关键字的封装器 
                ViewData["Items"] = items;
                return View();  
            }

    在View中:

    @{
        <ul>
            @foreach (dynamic p in ViewBag.Items)
            {
                <li>The item is: @p</li>
            }
    		@foreach (string a in (string[])ViewData["Items"])
    		{
    		    <li>The item is: @a</li>
    		}
        </ul>
    }
  • 相关阅读:
    tensorflow日志信息如何屏蔽?
    测试图像篡改模型fps逐渐降低的原因?
    np.float32()和np.float64
    hive on spark运行时 ,读取不到hive元数据问题
    Hadoop之HDFS(二)HDFS工作机制和集群安全模式
    Spark中的Driver和Executor详解及相关调优
    Linux查看物理CPU个数、核数、逻辑CPU个数
    shell命令查看进程id,并杀死进程,停止脚本
    Flink CDC 2.0 正式发布,详解核心改进
    Kafka 如何保证消息的消费顺序一致性
  • 原文地址:https://www.cnblogs.com/maoyazhi/p/5946450.html
Copyright © 2020-2023  润新知