C#之razor
分类:计算机编程

学习的稿子在那地:

作者:[美]Adam Freeman      来源:《精通ASP.NET MVC 4》

 

Razor 是微软 MVC3 引入的视图引擎的名号,并在MVC 4 中展开了修改装订。视图引擎处理ASP.NET内容,并查找指令,规范的是将动态内容插入到发送给浏览器的出口。

微软保持了多少个视图引擎 —— 已经扶持 ASP.NET 开垦大多年的基于<% 和 %>标签的 ASPX 引擎,以至以@字符阐明内容范围的 Razor 引擎。

1.创造示范项目

张开Microsoft Visual Studio 2011 ,新建MVC 4项目 Razor ,选取航空模型板。

1.1 定义模型

在 Models 文件夹下新建类文件 Product.cs

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

1.2 定义调整器

在 Controllers 文件夹下新建调整器 HomeController ,模板为空

namespace Razor.Controllers
{
    /**
     * 此类定义了一个叫做 Index 的动作方法,创建了一个Product 对象,并对其进行属性填充。
     * 将此Product 对象传递给了 View 方法,以便在渲染视图时使用它。
     * */
    public class HomeController : Controller
    {
        Product myProduct = new Product
        {
            ProductID = 1,
            Name = "Kayak",
            Description = "A boat for one person",
            Category = "Watersports",
            Price = 275M
        };

        public ActionResult Index()
        {
            return View(myProduct);
        }

    }
}

1.3 成立视图

右击 HomeController 类的 Index 方法,增添视图像和文字件 Index.cshtml ,模型类为 Razor.Models.Product

图片 1

 

@model Razor.Models.Product

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div>

    </div>
</body>
</html>

 

2.运用模型对象

从视图第大器晚成行开头

...
@model Razor.Models.Product
...

Razor 语句以@字符最早。此处@model 语句证明了通过动作方法传递给该视图的模型对象的门类。那让客商能够透过@Model 来引用视图模型对象的点子、字段和总体性。

@model Razor.Models.Product

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div>
        产品名称:@Model.Name
    </div>
    <div>
        产品说明:@Model.Description
    </div>
    <div>
        产品类别:@Model.Category
    </div>
</body>
</html>

体现效果:

图片 2

* 注解视图模型对象的品类应用@model (小写m),而访谈Name 属性使用@Model (大写M)。

 

3.运用布局

Index.cshtml 视图像和文字件中的另一个 Razor 表达式如下所示:

...
@{
    Layout = null;
}
...

那是一个 Razor 代码块的例证,这种代码块能够在视图中包括C#说话。这种代码块以@{开端,以}甘休,而内部的语句会在视图被渲染时开展实行。

此间将Layout 设置为null的遵从是告诉 MVC 框架,改视图是自富含的,而且会渲染重回给客商端所须要的全部内容。

3.1 创建布局

右击Views 文件夹新建 "MVC 4布局页(Razor)",文件名称为 _BaseLayout.cshtml 。布局的早先时代内容如下:

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
</head>
<body>
    <div>
        @RenderBody()
    </div>
</body>
</html>

布局是出格方式的视图。对@RenderBody 方法的调用会将动作方法所钦命的视图内容插入到布局标志中。布局中的另二个Razor 表明式会在 ViewBag 中追寻二个称为 Title 的习性,指标是安装 title 成分的内容。

改善布局文件如下:

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
</head>
<body>
    <div>
        <h1>Product Information</h1>
        <div style="padding:20px;border:solid medium black;font-size:20pt;">
            @RenderBody()
        </div>
        <h2>Visit <a href="http://apress.com">Apress</a></h2>
    </div>
</body>
</html>

3.2 运用布局

为了将布局文件运用于视图,只需求设置 Layout 属性的值。纠正 Index.cshtml 如下:

@model Razor.Models.Product

@{
    ViewBag.Title = "Product Info";
    Layout = "~/Views/_BaseLayout.cshtml";
}
<div>
    产品名称:@Model.Name
</div>
<div>
    产品说明:@Model.Description
</div>
<div>
    产品类别:@Model.Category
</div>
<div>
    产品价格:$@Model.Price
</div>

呈现效果如下图所示:

图片 3

 3.3 使用视图开首文件

还会有个小难点要化解,那便是,必得在每二个视图中都要钦定布局文件。那象征,要重新命名布局文件,那么必需搜索引用该布局的每一个视图并举办改换,那将是三个易错的长河。

经过行使视图初步文件能够化解此主题材料。在渲染一个视图时,MVC 框架会招来多少个叫作 _ViewStart.cshtml 的公文。框架会将此文件的原委正是视图像和文字件的风度翩翩部分,于是顾客能够行使那风姿洒脱特点为 Layout 属性自动的装置贰个值。

平等,在Views 文件夹下新建"MVC 4布局页(Razor)",文件名字为 _ViewStart.cshtml ,修改文件内容为:

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

此视图发轫文件含有 Layout 属性的值,那象征客户能够去除 Index.cshtml 文件中相应的讲话:

@model Razor.Models.Product

@{
    ViewBag.Title = "Product Info";
}
<div>
    产品名称:@Model.Name
</div>
<div>
    产品说明:@Model.Description
</div>
<div>
    产品类别:@Model.Category
</div>
<div>
    产品价格:$@Model.Price
</div>

不要求以其余方式钦赐希望利用的视图最早文件。MVC 框架会对此文件进行一定,并自行地使用其内容。若在视图像和文字件中再一次定义了 Layout 值,会覆盖视图起始文件中所钦点的布局。

3.4 演示分享布局

在调控器文件 HomeController 中新建艺术 NameAndPrice 如下:

        public ActionResult NameAndPrice()
        {
            return View(myProduct);
        }

增加对应的视图文件 NameAndPrice.cshtml 如下

图片 4

@model Razor.Models.Product

@{
    ViewBag.Title = "NameAndPrice";
    Layout = "~/Views/_BaseLayout.cshtml";
}

<h2>NameAndPrice</h2>
The product name is @Model.Name and it costs $@Model.Price

起始并导航到 /Home/NameAndPrice ,展现效果如下:

图片 5

 

4.使用 Razor 表达式

在三个好的MVC框架应用程序中,动作方法与视图所起的功效是清楚分离的。

动作方法与视图所起的职能

组件

要做的事

不做的事

动作方法

向视图传递二个视图模型

向视图传递格式化的多少

视图

选拔视图模型对象向客商突显内容

改良视图模型对象的其余地点

 

 

 

 

4.1插入数据值

用 Razor 表明式能做的最简便的业务是将数据值插入到标志中。客户能够用@Model 表明式来做这件工作,以援用视图模型对象所定义的质量和艺术,只怕选择@Viewbag 表明式,以引用通过视图包个性动态定义的性质。

在 Home 调节器中新扩展动作方法 德姆oExpressions

        public ActionResult DemoExpressions()
        {
            ViewBag.ProductCount = 1;
            ViewBag.ExpressShip = true;
            ViewBag.ApplyDiscount = false;
            ViewBag.Supplier = null;
            return View(myProduct);
        }

并创立对应的视图像和文字件 德姆oExpression.cshtml

@model Razor.Models.Product

@{
    ViewBag.Title = "DemoExpressions";
}
<table>
    <thead>
        <tr><th>Property</th><th>Value</th></tr>
    </thead>
    <tbody>
        <tr><th>Name</th><th>@Model.Name</th></tr>
        <tr><th>Price</th><th>@Model.Price</th></tr>
        <tr><th>Stock Level</th><th>@ViewBag.ProductCount</th></tr>
    </tbody>
</table>

导航到相应的UTiggoL /Home/德姆oExpressions ,彰显效果如下:

图片 6

4.2 设置标签属性的值

到此结束的有所例子都是安装成分内容,但客商也能够行使Razor 表明式来设置成分标签的值。更注重图像和文字件 德姆oExpressions.cshtml 文件如下:

@model Razor.Models.Product

@{
    ViewBag.Title = "DemoExpressions";
}
<table>
    <thead>
        <tr><th>Property</th><th>Value</th></tr>
    </thead>
    <tbody>
        <tr><th>Name</th><th>@Model.Name</th></tr>
        <tr><th>Price</th><th>@Model.Price</th></tr>
        <tr><th>Stock Level</th><th>@ViewBag.ProductCount</th></tr>
    </tbody>
</table>
<div data-discount="@ViewBag.ApplyDiscount" data-express="@ViewBag.ExpressShip" data-supplier="@ViewBag.Supplier">
    The containing element has data attributes
</div>
Discount:<input type="checkbox"  checked="@ViewBag.ApplyDiscount"/>
Express:<input type="checkbox" checked="@ViewBag.ExpressShip" />
Supplier:<input type="checkbox" checked="@ViewBag.Supplier" />

来得效果如下:

图片 7

 4.3 使用条件语句

矫正视图像和文字件 德姆oExpressions.cshtml 文件如下:

@model Razor.Models.Product

@{
    ViewBag.Title = "DemoExpressions";
}
<table>
    <thead>
        <tr><th>Property</th><th>Value</th></tr>
    </thead>
    <tbody>
        <tr><th>Name</th><th>@Model.Name</th></tr>
        <tr><th>Price</th><th>@Model.Price</th></tr>
        <tr><th>Stock</th>
            <th>
                @switch ((int)ViewBag.ProductCount)
                {
                    case 0:
                        @:Out of Stock
                        break;
                        case 1:
                        <b>Low Stock (@ViewBag.ProductCount)</b>
                        break;
                    default:
                    @ViewBag.ProductCount
                        break;
                }
            </th>
        </tr>
    </tbody>
</table>

为了开首八个标准化语句,要在C# 的条件主要字前放四个@字符。在这里例中,此标准根本字 switch。就如在准则的C# 代码块中的同样,要以闭花括号{}来终止代码块

在 Razor 代码块的在那之中,只要透过定义HTML 以致Razor 表达式,就足以将HTML 成分和数值插入到视图输出,比方:

...
<b>Low Stock (@ViewBag.ProductCount)</b>
...
@ViewBag.ProductCount
...

不一定会将成分或表明式放在引号内或以特殊的点子来表示它们——Razor 引擎会将那个解释为健康情势管理的出口。但是,即使想将未包括在HTML 成分中的文字文本插入到视图,则须要利用Razor 的三个帮助理工科程师具,并以它作为那生机勃勃行的前缀,比方:

...
@:Out of Stock
...

@:字符阻止Razor 将此行解释为一条C# 语句,那是Razor 境遇文件时的暗许行为。

此例彰显效果如下:

图片 8

把此例的switch语句改成if语句,也可发出类似的效果与利益:

@if (ViewBag.ProductCount == 0)
{
    @:Out of Stock
}
else if (ViewBag.ProductCount == 1)
{
    <b>Low Stock (@ViewBag.ProductCount)</b>
}
else
{ 
    @ViewBag.ProductCount
}

4.4 枚举数组和聚众

在编写MVC 应用程序时,客户会常常希望枚举二个数组或一些别样花样对象集结的内容,并生成大器晚成种细节内容。

在 Home 调控器文件 HomeController.cs 中新建动作方法 德姆oArray

        public ActionResult DemoArray()
        {
            Product[] array = { 
                              new Product{Name="Kayak",Price=275M},
                              new Product{Name="Lifejacket",Price=48.95M},
                              new Product{Name="Soccer",Price=19.50M},
                              new Product{Name="Corner flag",Price=34.95M}
                              };
            return View(array);
        }

下一场创设对应的视图文件德姆oArray.cshtml

@model Razor.Models.Product[]

@{
    ViewBag.Title = "DemoArray";
}
@if (Model.Length > 0)
{ 
    <table>
        <thead><tr><th>Product</th><th>Price</th></tr></thead>
        <tbody>
            @foreach(Razor.Models.Product p in Model){
            <tr>
                <td>@p.Name</td>
                <td>$@p.Price</td>
            </tr>
            }
        </tbody>
    </table>
}

导航到相应的UTucsonL地址:/Home/德姆oArray ,效果图如下:

图片 9

4.5 管理命名空间

此例在最棒的foreach 循环中利用了全限制名的Product 类:

...
@foreach(Razor.Models.Product p in Model)
...

能够对二个视图运用@using 表明式,以引进命名空间:

@using Razor.Models;
@model Product[]

@{
    ViewBag.Title = "DemoArray";
}
@if (Model.Length > 0)
{ 
    <table>
        <thead><tr><th>Product</th><th>Price</th></tr></thead>
        <tbody>
            @foreach(Product p in Model){
            <tr>
                <td>@p.Name</td>
                <td>$@p.Price</td>
            </tr>
            }
        </tbody>
    </table>
}

 

视图

1、视图起先文件_ViewStart.cshtml

先行利用 Blade

视图像和文字件 必须 优先惦记接纳 .blade.php 后缀来钦定使用 Blade 模板引擎。

@renderbody方法放在DIV中。那样我们得以分别哪些内容出自布局文件,哪些内容来自视图。

保险目录清晰

  • layouts - 页面布局文件 必须 放置于此目录下;
  • common - 寄存页面通用成分;
  • pages - 简单的页面存放文件夹,如:about、contact 等;
  • resources - 对应 Restful 路由的财富路线名称,以 ULacrosseI photos/create 为例,对应 create.blade.php文本,寄存在文书夹photos 下。

必须 避免在 resources/views 目录下直接放置视图文件。

2、Data特性

豆蔻梢头部分视图

一些视图像和文字件 必须 使用 _ 前缀来命名,如:photos/_upload_form.blade.php

3、强类型的视图

视图命名要释义

为了和 Restful 路由器和能源调节器保持风姿浪漫致,视图命名也 必须 使用财富视图的命名方式。以 photos 为例:

  • photos/index.blade.php
    • 剧情列表视图
    • 对应路由器 /photos,命名 photos.index
    • 控制器方法 PhotosController@index
  • photos/show.blade.php
    • 单个内容视图
    • 对应路由器 /photos/{id},命名 photos.show
    • 调整器方法 PhotosController@show
  • photos/create.blade.php
    • 剧情成立视图
    • 对应路由器 /photos/create,命名 photos.create
    • 调整器方法 PhotosController@create
  • photos/edit.blade.php
    • 内容编排的视图
    • 对应路由器 /photos/edit,命名 photos.edit
    • 调节器方法 PhotosController@edit

create_and_edit 视图

有的是情况下,创立和编写制定视图里的页面结构相符平常,在这里种景色下,应该 使用 create_and_edit 视图。以 photos 为例:

  • PhotosController@create - 对应视图:/photos/create_and_edit.blade.php
  • PhotosController@edit - 对应 视图:/photos/create_and_edit.blade.php

那样一来,平日情形下,一个完好的 photos 能源对应的视图像和文字件为以下:

├── photos
│   ├── create_and_edit.blade.php
│   ├── index.blade.php
│   └── show.blade.php

本文由pc28.am发布于计算机编程,转载请注明出处:C#之razor

上一篇:文化回想,字段以至事件 下一篇:没有了
猜你喜欢
热门排行
精彩图文