1. 程式人生 > >ASP.NET MVC Razor檢視引擎

ASP.NET MVC Razor檢視引擎

本篇文章我們一起來討論ASP.NET MVC框架中的Razor檢視引擎。主要包含以下內容:
1. Razor簡介
2. Razor語法
3. Razor如何呈現頁面
4. 佈局頁(Layout)

Razor簡介

Razor是微軟在ASP.NET MVC3中加入的新的檢視引擎,由於Razor簡單易用並且功能強大,迅速得到了大家的認可。但是,為了相容以前的程式碼,之前的ASPX檢視引擎(或稱為Web Forms 檢視引擎)還可以繼續使用。

需要說明的是,在一個組織良好的ASP.NET MVC專案中,Action和View是有明確的分工的。Action方法負責獲取資料並傳遞給View,但不關心如何來呈現資料。View負責如何呈現資料,但不關心資料從哪裡來,更不直接呼叫相關的業務方法來直接獲取資料。

Razor語法

在行內嵌入一個表示式

<p>現在是 @DateTime.Now.ToString()</p>
<p>今年是 @DateTime.Now.Year 年</p>

嵌入一個程式碼段

@{
    string myString="hello,world";
    int year=DateTime.Now.Year;
}

在這個程式碼段中可以宣告變數,這些變數在這個檢視的任何位置都可以訪問,例如

<p>@myString</p>
<p>今年是 @year 年</p
>

嵌入迴圈或判斷

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

注意: 在邏輯語句中,’@:’可以用來直接輸出純文字

<tbody>
    @foreach (Product p in productList) {
    <tr
>
<td>@p.Name</td> <td>[email protected]</td> </tr> } </tbody>

引用名稱空間

如果需要在檢視中引用某個名稱空間,可以

@using System.IO

強型別檢視

如果一個檢視被定義成強型別的,通過下面的方式來指定:

@model Razor.Models.Person

指定為強型別檢視後,該檢視中便可以通過@Model來接受Action傳遞過來的物件,例如:

<td>@Model.Name</td>
<td>@Model.Age</td>

Action方法返回強型別檢視的方式如下

public ActionResult GetPerson() {
    Person person=new Person();
    person.Name="Tom";
    person.Age=23;
    return View(person);
}

Razor如何呈現頁面

為了提高效能,在Razor檢視被首次被請求時,Razor檢視引擎會編譯這個檢視,將cshtml檢視編譯為C#程式碼,將vbhtml編譯為VB程式碼,這些編譯過的程式碼負責輸出HTML標籤和其他標籤給瀏覽器。這就是為什麼我們可以方便地在檢視頁面嵌入C#程式碼的原因。編譯後的程式碼大概是這個樣子的

namespace ASP {
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Helpers;
using System.Web.Security;
using System.Web.UI;
using System.Web.WebPages;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using System.Web.Mvc.Html;
using System.Web.Optimization;
using System.Web.Routing;
public class _Page_Views_Home_Index_cshtml : System.Web.Mvc.WebViewPage<string[]> {
public _Page_Views_Home_Index_cshtml() {
    public override void Execute() {
        ViewBag.Title = "Index";
        WriteLiteral("\r\n\r\nThis is a list of fruit names:\r\n\r\n");
        foreach (string name in Model) {
            WriteLiteral(" <span><b>");
            Write(name);
            WriteLiteral("</b></span>\r\n");
        }
    }
}

我們可以看出來,這個類繼承自System.Web.Mvc.WebViewPage< T>,強型別的檢視應該是這麼實現的。還能看出WriteLiteral這個方法會向瀏覽器輸出HTML標籤。
至於編譯後的檔案的存放位置,在ASP.NET MVC3時,還能在Temp資料夾中找到.cs檔案,在MVC4時就不知道去哪裡了,可能新的Razor檢視引擎在編譯完成以後會刪除原始檔吧。不管怎麼樣,這個不重要,不影響Razor檢視引擎的正常工作。

佈局頁(Layout)

Layout比較類似於WebForm中的母版頁,可以很輕鬆地是網站擁有相似的外觀,並且很好地提高了程式碼的內聚性。

建立佈局頁

右擊Views資料夾或Views的子資料夾,選擇 ”新增“=>”新建項“=>”MVC4 佈局頁”,然後輸入名字點選確定,佈局頁就建立好了,程式碼如下

<!DOCTYPE html>

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

當其它檢視使用該佈局頁時,會將程式碼嵌入到該佈局頁的 @RenderBody 處。

使用佈局頁

在檢視中指定使用的佈局頁

@{
    Layout="MyLayout";
}

使用View Start檔案

一般情況下,一個佈局頁會被很多檢視使用,如果手動設定每個檢視的Layout屬性,會很麻煩,並且出現了重複程式碼,不利於重構。MVC框架在呈現一個檢視之前,會先在Views資料夾中查詢一個名叫_ViewStart.cshtml的檔案,這個檔案會被認為是檢視檔案的一部分。一般在這個檔案中指定一個預設的Layout頁面,如果檢視檔案不專門對Layout屬性賦值的話,該檢視就預設採用ViewStart檔案中的佈局頁。當然,檢視頁面可以通過以下方式來指定該檢視不使用佈局頁或使用其它佈局頁
不使用佈局頁

@{
    Layout=null;
}

使用其它佈局頁

@{
    Layout="OtherLayoutPath";
}

如果在新建MVC專案是選擇”Internet應用程式“這個模板,那麼專案模板會在Views資料夾下包含一個名為_ViewStart.cshtml的檔案,程式碼如下

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

相關推薦

ASP.NET MVC Razor檢視引擎

本篇文章我們一起來討論ASP.NET MVC框架中的Razor檢視引擎。主要包含以下內容: 1. Razor簡介 2. Razor語法 3. Razor如何呈現頁面 4. 佈局頁(Layout) Razor簡介 Razor是微軟在ASP.

Asp.net MVC Razor檢視模版動態渲染PDF,Razor模版生成靜態Html

1.前言       上一篇文章我開源了輪子,Asp.net Core 3.1 Razor檢視模版動態渲染PDF,然後,很多小夥伴有很多私信找我了。那麼我下面就簡單的給大家說一下,關於小夥伴問的這些問題。 我專案的電子簽章部分程式碼可否開源?   答:我專案電子簽章也是使用第三方的電子簽章,電子

ASP.NET MVC Razor語法及實例

刪除 ava head shtml 參考 module sheet data som 1.混合HTML與Razor腳本 知識點:(1).cshtml怎樣引用訪問數據, (2).if for 與html嵌套 @using System.Data @using CI

Asp.net MVC Razor輸出字符串方法(js中嵌入razor

del 方式 註意 標簽 字符串方法 .net 輸出 text mod @{ Model p = new Model(); //輸出名稱和年齡 //1.第一種方式 @:姓名[email protected] //

適合ASP.NET MVC檢視片斷快取方式(上):起步

說到網站效能優化,沒有什麼比“快取”更重要了。即便是某些朋友口中念念不忘的“靜態頁”,說到底也只是快取了整張頁面內容而已。但是,顯然這樣大粒度的快取策略,在如今“牽一髮而動全身”的Web 2.0站點中幾乎是無法使用的。試想,在Twitter中的某個名人被數十萬人訂閱,那麼他發一條訊息,難道此時網站要去修改數十

適合ASP.NET MVC檢視片斷快取方式(下):頁面輸出原則

上一篇文章裡已經把Html.Cache打造成了非常具有可用性的API,需要快取時我們只需在頁面上做一個標記即可:<% Html.Cache("cache_key", DateTime.Now.AddSeconds(10), () => { %> <% foreach (

適合ASP.NET MVC檢視片斷快取方式(中):更實用的API

上一篇文章中我們提出了了片斷快取的基本方式,也就是構建HtmlHelper的擴充套件方法Cache,接受一個用於生成字串的委託物件。在快取命中時,則直接返回快取中的字串片斷,否則則使用委託生成的內容。因此,快取命中時委託的開銷便節省了下來。不過這個方法並不實用,如果您要快取大片的HTML,還需要準備一個Par

ASP.NET MVC 學習: 檢視

用檢視呈現UI 檢視可以不包含任何應用邏輯或者資料庫檢索程式碼,所有的應用邏輯都可以在controller中進行處理。 檢視通過使用controller類在呼叫RenderView方法的時候提供檢視相關資料物件呈現UI: publicvoid Categories() {     List<C

如何在FineUIMvc(ASP.NET MVC檢視中繫結多個模型?

起因 這是知識星球內的一個網友提出的,按理說ASP.NET MVC中一個檢視只能繫結一個模型(Model),在檢視頂部標識如下: @model IEnumerable<FineUICore.Examples.Areas.DataModel.Models.Student> 檢視中可

asp.net mvc razor佈局頁中a標籤的href的跳轉問題

筆者做了一個檔案上傳系統,檔案上傳後,儲存在wwwroot目錄的file資料夾中,並把該檔案的路徑儲存到資料庫中, 如這樣的一個路徑儲存在資料庫: file/b775f487-0127-41e0-9df8-2a5f1624cd87.jpg上傳成功後,當在home控制器的in

C# .Net MVC Razor 檢視靜態分頁導航欄生成器

這裡貼出3個重要組成部分 1.分頁導航欄主演算法程式碼(包括 @Html 擴充套件方法) 2.HTML 頁面呼叫程式碼(包括導航欄樣式) 3.Controller 控制器程式碼    引數說明:pc(pageCount),總頁數    其中的 2 是:pageIndex

ASP.NET MVC Razor

-c 表示 lose () inf span model tar oct MVC項目中多個頁面有相同的東西,框架中提供了幾種解決方案: partialView,Layout,section 一、partialView分布頁 1用戶控件axcs——

ASP.NET Core Razor 檢視預編譯、動態編譯

0x01 前言 ASP.NET Core在預設釋出情況下,會啟動預編譯將試圖編譯成xx.Views.dll,也許在檢視中打算修改一處很細小的地方我們需要再重新編譯檢視進行釋出。下面我將從 ASP.NET Core 3 之前版本到 ASP.NET Core 3X 之後版本的一個配置列下下方供大家參考。 0

ASP.NET MVC 3.0 Razor檢視如何展示多實體

 Razor檢視模型支援@model來初始化頁面物件型別,比如: 1     @model FlashTravel.Models.Traveller> 也可以是一個支援迭代的公開列舉器: 1   

ASP.NET MVCRazor引擎:View編譯原理

通過.cshtml或者.vbhtml檔案定義的View能夠被執行,必須先被編譯成存在於某個程式集的型別,ASP.NET MVC採用動態編譯的方式對View檔案實施編譯。當我們在對ASP.NET MVC進行部署的時候,需要對.cshtml或者.vbhtml檔案進行打包。針對某個View的第一次訪問會觸發針對它的

ASP.NET MVC 自定義Razor檢視WorkContext

一、實現背景 我們在使用ASP.NET MVC+Razor檢視做WEB專案的時候大家或許都有這樣的需求: 1、我們需要在每個Action中獲取一些Request請求的一些公用資訊 比如: IsAjax 當前是否為Ajax請求 CurrentUserId 當前登入使用者Id (從Cookie中或Sessi

asp.net mvc webform和razor的page基類區別

bpa shtml lena tor data lang pil prot 擴展 接觸過asp.net mvc的都知道,在傳統的webform的模式下,page頁面的基類是這樣聲明的: <%@ Page Language="C#" MasterPageFile=

轉載:ASP.NET MVC擴展自定義視圖引擎支持多模板&動態換膚skins機制

生效 amp 文件名 attr 情況 etc lis new out ASP.NET mvc的razor視圖引擎是一個非常好的.NET MVC框架內置的視圖引擎。一般情況我們使用.NET MVC框架為我們提供的這個Razor視圖引擎就足夠了。但是有時我們想在我們的項目支持多

ASP.NET MVC 學習筆記-3.Razor語法

OS 及其 wid resources 日期 ext str oca 區分   Razor語法是一種嵌入在網頁中基於服務器的代碼的編程語法。使用Razor語法的網頁中包括兩個不同類型的內容:客戶端內容和服務器內容。客戶端內容是網頁中常用的內容,比如,HTML標記(元素)、C

ASP.NET MVC 學習筆記-2.Razor語法

包含 鏈接 完整 rdquo 復雜 per 幫助 完成後 ade 1. 表達式 表達式必須跟在“@”符號之後, 2. 代碼塊 代碼塊必須位於“@{}”中,並且每行代碼必須以“;