一、運用布局和視圖起始文件
布局的使用,可以簡化視圖,允許用戶創建能夠運用於多個視圖的通用HTML,並使得維護更加容易。下面是一個簡單的例子:
域模型類:
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; }
}
控制器:
using System.Web.Mvc;
using Razor2.Models;
namespace Razor2.Controllers
{
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);
}
}
}
右擊控制器方法,創建Index視圖。

View視圖代碼如下
@model Razor2.Models.Product
@{
ViewBag.Title = "Index";
}
Product Name:@Model.Name
【注意】勾選“使用布局及母版頁”但下面的文本框為空,使用的是視圖起始文件_ViewStart.cshtml里規定的視圖
視圖起始文件
@{
Layout = "~/View/_BasicLayout.cshtml";
}
這里說下是否勾選“使用布局或母版頁”以及下面的文本框是否選擇的不同:
不勾選 | 勾選,文本框為空 | 勾選,且文本框不為空 | |
不同點 | 不運用布局,即視圖自己完成css等布局 | 使用視圖起始文件規定的布局 | 使用文本框中選擇的布局 |
表現 |
@{
ViewBag.Title = "Index";
Layout = null;
} |
@{
ViewBag.Title = "Index";
} |
@{
ViewBag.Title = "Index";
Layout = "~/View/_BasicLayout.cshtml";
} |
有很多視圖都引用同一個布局,而如果需要重命名布局文件,就必須找到引用該布局的每一個視圖進行修改。通過使用視圖起始文件可以解決這個問題。
不必以任何方式指定希望使用的視圖起始文件。MVC框架會對此文件進行定位,並自動使用其內容。
在視圖文件中對這一值所做的定義具有更高的優先級,這便是對視圖起始文件的覆蓋。
二、使用分部視圖
分部視圖是嵌入另一個視圖中的一個內容片段。
分部視圖是自包含文件,且可以跨視圖重用,有助於減少重復,尤其是需要在應用程序的幾個地方渲染同樣的數據時。

對ProductSummary分部視圖添加標記
@model Razor2.Models.Product
<div class="item">
<h3>@Model.Name</h3>
@Model.Description
<h4>@Model.Price.ToString("c")</h4>
</div>
然后在相應的視圖里,添加對這個分部視圖的引用
@Html.RenderPartial("ProductSummary",p);
//或者
//@Html.Partial("ProductSummary", p);
【這里好像要求p是Model里一個子元素,即Model映射的對象要是一個集合。具體情況待以后觀察。。。】
三、使用Razor表達式
1)使用條件語句
Home控制器增加下面代碼
public ActionResult DemoExpression() {
ViewBag.ProductCount = 1;
ViewBag.ExpressShip = true;
ViewBag.ApplyDiscount = false;
ViewBag.Supplier = null;
return View();
}
創建相應的視圖
@model Razor2.Models.Product
@{
ViewBag.Title = "DemoExpression";
}
<h2>DemoExpression</h2>
<h4>數量</h4><br />
@switch ((int)ViewBag.ProductCount) {
case 0:
@: Out of Stock
break;
case 1:
<b>Low Stock(@ViewBag.ProductCount)</b>
break;
default:
@ViewBag.ProductCount
break;
}
a.可以看到在Razor視圖里可以使用C#語法,前提是要在C#關鍵字前面加一個@字符。
b.在Razor代碼塊內部,只要通過定義HTML【如:
<
b
>
Low Stock(@ViewBag.ProductCount)
</
b
>
】及Razor表達式【如:
@
ViewBag.ProductCount
】,就可以將HTML元素和數據值插入到視圖輸出。
c.而如果想將未包含在HTML元素中的文本文字插入到視圖,則需要使用Razor的輔助工具@:,@:字符可以阻止Razor將此行解釋為一條C#語句
2.在視圖中加入命名空間的兩種方式
1)可以在視圖中運用@using表達式,引入命名空間;
2)在Views/Web.config文件【這是視圖專用的配置文件】里的
<
namespaces
>
標簽里增加子標簽;
【參考資料】
《精通ASP.NET MVC4》