C#之razor

学学的稿子在此间:

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

 

Razor 是微软 MVC三引进的视图引擎的称号,并在MVC 肆 中开展了修订。视图引擎处理
ASP.NET内容,并招来指令,典型的是将动态内容插入到发送给浏览器的输出。

微软保持了多个视图引擎 ——
已经支撑 ASP.NET 开发许多年的依照<% 和 %>标签的 ASPX
引擎,以及以@字符标注内容范围的 Razor 引擎。

壹.创办示范项目

打开Microsoft Visual
Studio 2013 ,新建MVC 四项目 Razor ,采用航空模型板。

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

一.二 定义控制器

在 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.三 创立视图

右击 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>

 

二.采纳模型对象

从视图第壹行起首

...
@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)。

 

三.行使布局

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

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

这是3个 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
方法的调用会将动作方法所钦赐的视图内容插入到布局标记中。布局中的另3个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>

三.二 运用布局

为了将布局文件运用于视图,只须要安装 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

C#之razor。 3.三 使用视图初始文件

还有个小标题要化解,这就是,必须在每多个视图中都要钦点布局文件。那意味着,要重新命名布局文件,那么必须找出引用该布局的种种视图并举办改动,那将是一个易错的经过。

美高梅开户网址 ,经过应用视图早先文件能够化解此题材。在渲染三个视图时,MVC
框架会招来二个叫作 _ViewStart.cshtml
的文本。框架会将此文件的内容正是视图像和文字件的一局地,于是用户能够应用这一表征为
Layout 属性自动的设置1个值。

1如既往,在Views 文件夹下新建”MVC 四布局页(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 值,会覆盖视图起初文件中所内定的布局。

三.四 演示共享布局

在控制器文件 HomeController 中新建艺术 NameAnd普赖斯 如下:

        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 表达式

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

动作方法与视图所起的功效

组件

要做的事

不做的事

动作方法

向视图传递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>

导航到相应的UENCOREL /Home/DemoExpressions ,显示效果如下:

美高梅开户网址 6

四.二 设置标签属性的值

到此甘休的装有例子都以安装成分内容,但用户也足以采纳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

 四.叁 使用口径语句

修改视图像和文字件 德姆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# 代码块中的1样,要以闭花括号{}来终止代码块

在 Razor 代码块的中间,只要通过定义HTML 以及Razor 表达式,就能够将HTML
成分和数值插入到视图输出,例如:

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

不用将成分或表明式放在引号内或以特殊的办法来表示它们——Razor
引擎会将这几个解释为健康格局处理的输出。不过,如若想将未蕴含在HTML
成分中的文字文本插入到视图,则须求采取Razor
的3个帮助理工程师具,并以它作为那一行的前缀,例如:

...
@: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 枚举数组和集合

在编写MVC
应用程序时,用户会时时希望枚举叁个数组或局地其余格局对象集合的情节,并生成1种细节内容。

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

导航到对应的U卡宴L地址:/Home/DemoArray ,效果图如下:

美高梅开户网址 9

4.伍 处理命名空间

此例在最棒的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>
}

 

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

 

Razor 是微软 MVC3引入的视图引擎的名号,并在MVC 肆 中展开了修订。视图引擎处理
ASP.NET内容,并摸索指令,典型的是将动态内容插入到发送给浏览器的出口。

微软保持了五个视图引擎 ——
已经帮助 ASP.NET 开发许多年的依照<% 和 %>标签的 ASPX
引擎,以及以@字符标注内容范围的 Razor 引擎。

一.创制示范项目

开拓Microsoft Visual
Studio 2013 ,新建MVC 4项目 Razor ,选拔航空模型板。

一.一 定义模型

在 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.二 定义控制器

在 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);
        }

    }
}

一.三 创设视图

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

美高梅开户网址 10

 

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

 

二.利用模型对象

从视图第一行开首

...
@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>

来得效果:

美高梅开户网址 11

* 评释视图模型对象的花色应用@model (小写m),而访问Name 属性使用@Model
(大写M)。

 

3.应用布局

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

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

那是多个 Razor
代码块的事例,那种代码块能够在视图中蕴藏C#言语。那种代码块以@{开端,以}甘休,而其间的语句会在视图被渲染时展开实施。

那里将Layout 设置为null的功用是报告 MVC
框架,改视图是自包罗的,并且会渲染再次回到给客户端所急需的全体内容。

三.① 创设布局

右击Views 文件夹新建 “MVC 四布局页(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
方法的调用会将动作方法所钦命的视图内容插入到布局标记中。布局中的另3个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>

三.二 运用布局

为了将布局文件运用于视图,只须求设置 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>

来得效果如下图所示:

美高梅开户网址 12

 三.三 使用视图起头文件

还有个不成难题要缓解,那正是,必须在每三个视图中都要钦定布局文件。那表示,要重新命名布局文件,那么必须找出引用该布局的每五个视图并开始展览改动,那将是一个易错的长河。

透过动用视图早先文件能够缓解此难点。在渲染贰个视图时,MVC
框架会寻找二个叫作 _ViewStart.cshtml
的文件。框架会将此文件的情节就是视图像和文字件的一部分,于是用户可以动用这1特征为
Layout 属性自动的安装叁个值。

无差距于,在Views 文件夹下新建”MVC ④布局页(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 值,会覆盖视图早先文件中所钦定的布局。

三.肆 演示共享布局

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

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

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

美高梅开户网址 13

@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 ,展现效果如下:

美高梅开户网址 14

 

4.使用 Razor 表达式

在3个好的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>

导航到相应的URL /Home/德姆oExpressions ,展现效果如下:

美高梅开户网址 15

4.贰 设置标签属性的值

到此结束的装有例子都是安装成分内容,但用户也足以选拔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" />

彰显效果如下:

美高梅开户网址 16

 四.三 使用口径语句

修改视图像和文字件 德姆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>

为了伊始1个口径语句,要在C#
的规则根本字前放多少个@字符。在此例中,此条件主要字
switch。就如在规则的C# 代码块中的1样,要以闭花括号{}来终止代码块

在 Razor 代码块的当中,只要通过定义HTML 以及Razor 表达式,就足以将HTML
元素和数值插入到视图输出,例如:

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

不用将成分或表达式放在引号内或以特殊的办法来表示它们——Razor
引擎会将那个解释为健康格局处理的出口。但是,假设想将未包蕴在HTML
成分中的文字文本插入到视图,则必要利用Razor
的2个协助工具,并以它作为那1行的前缀,例如:

...
@:Out of Stock
...

@:字符阻止Razor 将此行解释为一条C# 语句,这是Razor
遭遇文件时的私下认可行为。

此例展现效果如下:

美高梅开户网址 17

把此例的switch语句改成if语句,也可发出相同的成效:

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

四.四 枚举数组和聚众

在编写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>
}

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

美高梅开户网址 18

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

 

视图

一、视图起先文件_ViewStart.cshtml

预先选择 Blade

视图像和文字件 必须 优先思念动用 .blade.php 后缀来钦点使用 Blade
模板引擎。

@renderbody方法放在DIV中。那样大家能够区分哪些内容来自布局文件,哪些内容出自视图。

保险目录清晰

  • layouts – 页面布局文件 必须 放置于此目录下;
  • common – 存放页面通用元素;
  • pages – 简单的页面存放文件夹,如:about、contact 等;
  • resources – 对应 Restful 路由的财富路径名称,以 U路虎极光I photos/create
    为例,对应 create.blade.php文件,存放在文件夹photos 下。

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

2、Data特性

一部分视图

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

三、强类型的视图

视图命名要释义

为了和 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

那样壹来,平常境况下,1个完整的 photos 财富对应的视图像和文字件为以下:

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图