《精通MVC5.0》chapter5笔记-Razor语法

Posted 花开花落-2014

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《精通MVC5.0》chapter5笔记-Razor语法相关的知识,希望对你有一定的参考价值。

1.1.视图声明数据类型

Razor声明都是@开始,例如@model MVC.Models.Product声明了控制器创给视图的数据类型,这样就可以在视图使用@Modle.property访问数据,如下@Model.Name,注意此处Model首字母大写,声明数据类型model首字母小写

@model MVC.Models.Product

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div> 
        @Model.Name
    </div>
</body>
</html>
对应的控制器方法:
 public class HomeController : Controller
    {
        public Product MyProduct = new Product()
        {
            ProductID = 1,
            Name = "Kayak",
            Description = "A boat for one person",
            Category = "Watersports",
            Price = 275M
        };
        // GET: Home
        public ActionResult Index()
        {
            return View(MyProduct);
        }
    }

1.2.视图模板设置

模板文件命名约定_开头,例如_BasicLayout.cshtml

@RenderBody

@model MVC.Models.Product

@{
    ViewBag.Title = "Product Name";
    Layout = "~/Views/_BasicLayout.cshtml";
}

@Model.Name

1.3.使用ViewStart文件

如果每个视图页面都使用到了同一个模板文件,那么是否每个视图页面都要设置一次Layout = "....."岂不是很麻烦。使用_ViewStart.cshtml可以指定默认模板可以解决,如下_ViewStart.cshtml

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

此时Index.cshtml页面就不用指定模板,默认模板使用_BasicLayout.cshtml

@model MVC.Models.Product

@{
    ViewBag.Title = "Product Name";
}

@Model.Name

1.4.使用Razor Expressions

控制器方法应该做的是传一个数据对象或对象集合给对应视图,而不是确切的数据。记住传给视图的数据是对应数据类型一个对象或对象集合。假如有个视图页面Price.cshtml用于展示价格,此时对应的控制器方法应该是return View(myProduct),而不是return View(myProduct.Price),然后在视图页面再用Razor @Model 表达式获取确切数据,例如

 

The Product name is @Model.Name,and it costs $@Model.Price

 

1.5.使用ViewBag传数据给视图

//控制器方法

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

//对应视图
@model MVC.Models.Product

@{
    ViewBag.Title = "DemoViewBag";
}

<table>
    <thead>
        <tr><th>Property</th><th>Value</th></tr>
    </thead>
    <tbody>
        <tr><td>Name</td><td>@Model.Name</td></tr>
        <tr><td>Price</td><td>@Model.Price</td></tr>
        <tr><td>Stock Level</td><td>@ViewBag.ProductCount</td></tr>
    </tbody>
</table>

1.6.控制器传的数据作为属性值

 

//控制器方法
public ActionResult DemoViewBag()
        {
            ViewBag.ProductCount = 1;
            ViewBag.ExpressShip = true;
            ViewBag.ApplyDiscount = false;
            ViewBag.Supplier = null;
            return View(MyProduct);
        }
//对应视图
@model MVC.Models.Product

@{
    ViewBag.Title = "DemoViewBag";
}

<div data-discount="@ViewBag.ApplyDiscount" express="@ViewBag.ExpressShip" data-supplier="@ViewBag.Supplier">
    The containing element has data attributes
</div>
Discount1:<input type="checkbox" checked="@ViewBag.ApplyDiscount"/>
Discount2:<input type="checkbox" checked="@Model.isDiscount"/>
Express:<input type="checkbox" checked="@ViewBag.ExpressShip"/>

1.7.Razor条件表达式

条件表达式以@开始,}结束

在视图中插入纯文本,且没有被html标签包围,需要@:前缀,例如@:Out of Stock

 

@model MVC.Models.Product

@{
    ViewBag.Title = "DemoViewBag";
}
<table>
    <thead>
        <tr><th>Property</th><th>Value</th></tr>
    </thead>
    <tbody>
        <tr><td>Name</td><td>@Model.Name</td></tr>
        <tr><td>Price</td><td>@Model.Price</td></tr>
        <tr><td>Stock Level</td>
            <td>
                @switch ((int)ViewBag.ProductCount)
                {
                    case 0:
                        @:out of Stock
                        break;
                    case 1:
                        <b>Low Stock(@ViewBag.ProductCount)</b>
                        break;
                    default:
                        @ViewBag.ProductCount
                        break;
                }
            </td>
        </tr>
    </tbody>
</table>
@model MVC.Models.Product

@{
    ViewBag.Title = "DemoViewBag";
}
<table>
    <thead>
        <tr><th>Property</th><th>Value</th></tr>
    </thead>
    <tbody>
        <tr><td>Name</td><td>@Model.Name</td></tr>
        <tr><td>Price</td><td>@Model.Price</td></tr>
        <tr><td>Stock Level</td>
            <td>
                @if (ViewBag.ProductCount==0)
                {
                    @:Out of Stoc
                }
                else if (ViewBag.ProductCount == 1)
                {
                    <b>Low Stock(@ViewBag.ProductCount)</b>
                }else
                {
                    @ViewBag.ProductCount
                        
                }
            </td>
        </tr>
    </tbody>
</table>

 1.8.Razor遍历数组和集合

注意:在视图页面引入命名空间与后台代码一样:@using 命名空间

//控制器方法  
public ActionResult DemArray()
        {
            Product[] array = {
                new Product() { Name = "kaya",Price=275M },
                new Product() { Name="Lifejacket",Price=48.95M},
                new Product() { Name="Soccer ball",Price=19.50M},
                new Product() { Name="Corner flag",Price=34.95M},
            };
            return View(array);
        }
//对应视图
@model MVC.Models.Product[]
@using MVC.Models
@{
    ViewBag.Title = "DemArray";
    Layout = "~/Views/_BasicLayout.cshtml";
}

<h2>DemArray</h2>
@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>[email protected]</td>
                </tr>
            }
        </tbody>
    </table>
}

 

以上是关于《精通MVC5.0》chapter5笔记-Razor语法的主要内容,如果未能解决你的问题,请参考以下文章

HackingC++ Learning笔记 Chapter5-Standard Library – Part 1

C++ Primer笔记5---chapter5易错点

精通Visual.Cpp实效编程280例

OpenGL chapter5 基础纹理

MVC5.0

IIS部署Mvc5.0出现403.14怎么解决