八:Razor(MVC框架视图引擎)

模型对象

1:新建一个示例的MVC项目

2:在Models文件夹下新建类Product

namespace TestDemoMVC.Models
{
    public class Product
    {
        public int ProductID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public string Category { get; set; }
        public decimal Price { get; set; }
    }
}

3:修改控制器HomeController中代码如下

using System.Web.Mvc;
using TestDemoMVC.Models;

namespace TestDemoMVC.Controllers
{
    public class HomeController : Controller
    {
        Product product = new Product()
        {
            ProductID = 1,
            Name = "C#",
            Category = ".NET",
            Description = "Program Language",
            Price = 102M
        };
        public ActionResult Index()
        {
            return View(product);
        }
    }
}

4:修改视图Index.cshtml

@model TestDemoMVC.Models.Product

@{
    Layout = null;
}

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Razor Example</title>
</head>
<body>
    <div>@Model.Name</div>
</body>
</html>

说明

  • Razor语句是以@字符开头
  • @model语句声明了通过动作方法传递给视图模型对象的类型。通过@Model就可以引用视图模型对象
  • Razor代码块是以@开头大括号{}包含的内容。

布局

1:创建布局

在Views文件夹下新建View,命名为_TestLayout.cshtml。注意这里第一个字符是半角下划线

修改内容如下

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title></title>
</head>
<body>
    <h1>布局前</h1>
    <div>
        @RenderBody()
    </div>
    <h2>布局后</h2>
</body>
</html>

2:再修改Views/Home文件夹下的文件Index.cshtml中的Layout部分

@{
    Layout = "~/Views/_TestLayout.cshtml";
}

3:运行可以看到结果如下

布局相当于一个模板,这样对于多个页面来说,不需要给每个页面都单独设计布局,只需要统一引用布局页面。整个应用就会是统一的样式。

视图起始文件

如果我们把Index.cshtml的Layout指定删除,及不指定为null。那么运行结果可以发现会有示例的默认布局。

这是MVC框架默认会查找Views下一个文件_ViewStart.cshtml文件。也就是说如果不想指定布局,页面必须显式的指定布局为空,即null

Razor表达式

动作方法和视图

动作方法:向视图传递视图模型,但是不会格式化数据(格式化的含义是如何显示)

视图:用视图模型对象向用户表现内容,但是不会修改视图模型对象的任何内容

插入数据值方法一:使用视图模型。方法二:使用ViewBag表达式

1:在HomeController中修改Index方法

        public ActionResult Index()
        {
            ViewBag.Test = "TestString";
            ViewBag.MyNumber = 10000;
            return View(product);
        }:

2:修改Index.cshtml文件中的body部分

<body>
    <div>@Model.Name</div>
    <div>@ViewBag.Test</div>
    <div>@ViewBag.MyNumber</div>
    <div>@ViewBag.NoExist</div>
</body>

这里故意引用一个不存在的数据NoExist。运行后页面可以正常显示

3:在Index.cshtml的Layout定义部分修改内容如下

@{
    ViewBag.NoExist="Test NoExist String";
    Layout = "~/Views/_TestLayout.cshtml";
}

运行后得到结果如下

 4:使用条件语句

修改Index.cshtml中body的内容

<body>
    <div>@Model.Name</div>
    <div>@ViewBag.Test</div>
    <div>@ViewBag.MyNumber</div>
    <div>@ViewBag.NoExist</div>
    @if(Model.Price>100)
    {
        @:太贵了
    }
    else
    {
        @:挺便宜,买了
    }
</body>

可以看到@包含的内容几乎和正常的书写代码一致

5:使用循环语句

在body中新增下面内容

    @{int total = 0;
        for(int i=0;i<=100;i++)
        {
            total += i;
        }
        @:Total:@total
    } 

运行结果

6:处理命名空间

如果需要引用某个命名空间,可以在页面的开始部分使用

@using 命名空间

这样的语句

posted @ 2018-11-01 10:50  岚山夜话  阅读(203)  评论(0编辑  收藏  举报