ASP.NET MVC——Razor視圖引擎

来源:http://www.cnblogs.com/skyshalo/archive/2016/08/25/5807143.html
-Advertisement-
Play Games

Razor是MVC框架視圖引擎,我們今天就來說一說Razor視圖引擎。 首先還是來創建一個基礎項目叫Razor來演示。 先來定義一個Model叫Product 接著,來定義一個控制器。 最後,在Views/Home文件夾中創建Index.cshtml文件。 1. 使用模型對象 我們在視圖的第一行使用 ...


Razor是MVC框架視圖引擎,我們今天就來說一說Razor視圖引擎。

首先還是來創建一個基礎項目叫Razor來演示。

先來定義一個Model叫Product

    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 { set; get; }
    }

接著,來定義一個控制器。

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

最後,在Views/Home文件夾中創建Index.cshtml文件。

1. 使用模型對象

   我們在視圖的第一行使用這樣的語法 @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>
</body>
</html>

2. 使用佈局

    為了創建一個佈局,右擊View是文件夾,添加-> MVC 5佈局頁(Razor),將文件名設置為_BasicLayout.cshtml (註意第一個字元是下劃線)。代碼如下:

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
</head>
<body>
    <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>
</body>
</html>

佈局是特殊形式的視圖。@RenderBody方法的調用會將動作方法所指定的視圖插入到佈局標記中。

為了使用佈局,只需要我們設置前面Index視圖的Layout。並且所創建的佈局中已經有一些Html元素,所以在視圖中可以將這些元素去除。Index視圖代碼修改如下:

@model Razor.Models.Product

@{
    ViewBag.Title = "Product Name";
    Layout = “~/Views/-BasicLayout.cshtml”;
}

Product Name: @Model.Name

 來看看效果。

還有一個問題需要解決,每個視圖都需要指定佈局,這就很麻煩了。我們可以使用視圖起始文件,在渲染視圖時,MVC框架會查找一個叫做_ViewStart.cshtml文件。框架會將此文件的內容視為視圖的一部分,我們就可以利用這一特性為Layout屬性設置一個值。為了創建視圖起始文件,在Views文件夾添加一個新的佈局文件,並將文件名設置為_ViewStart.cshtml。代碼如下:

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

再次修改Index視圖代碼:

@model Razor.Models.Product

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

Product Name: @Model.Name

 3. 使用Razor表達式

    Razor可以做的事情很多,包括使用C#語句(但是應該不用Razor執行業務邏輯)。

用Razor表達式能做的最簡單的事就是將數據值插入到標記中,我們可以用之前說的@Model表達式來做這件事。我們也可以@ViewBag表達式。

修改Home控制器,添加DemoExpression。

        public ActionResult DemoExpression()
       {
            ViewBag.ProductCount = 1;
            ViewBag.ExpressShip = true;
            ViewBag.ApplyDiscount = false;
            ViewBag.Supplier = null;

            return View(myProduct);
        }

我們在Views/Home文件夾中創建DemoExpression.cshtml視圖文件,代碼如下:

@model Razor.Models.Product

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

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

效果如下:

我們也可以使用條件語句。修改DemoExpression.cshtml如下:

@model Razor.Models.Product

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

<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 Stock
                } else if (ViewBag.ProductCount == 1) {
                    <b>Low Stock (@ViewBag.ProductCount)</b>
                } else {
                    @ViewBag.ProductCount
                }
            </td>
        </tr>
    </tbody>
</table>

為了開始一個條件語句,需要在C#的條件關鍵字前放一個@。

我們也可以使用枚舉數組和集合。

繼續在Home控制器創建一個DemoArray動作方法。

        public ActionResult DemoArray()
        {
            Product[] array = {
                new Product {Name = "Kayak", 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);
        }

創建DemoArray.cshtml,代碼如下:

@using Razor.Models
@model Product[]

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

@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>
} else {
    <h2>No product data</h2>
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我們在編寫程式時,會在程式運行過程中記錄一些日誌。log4net作為一款經久耐用的日誌組件,值得我們信賴。在中小型公司中,往往沒有專業的日誌伺服器來處理應用程式產生的日誌,而格式化不好的日誌文件又為上線後日誌的統計、分析、查找造成了困難。 Excel作為一款常用的辦公軟體,用來處理一些中小數量級的數 ...
  • 誠意滿滿直接上代碼: 併在Program類(Main函數所在類)中,增加如下函數即可: 註意:如果在CurrentDomain_UnhandledException中只列印異常而不終止程式的話,該異常仍然會被拋出,最終還是會導致彈出“XXX已停止工作”的對話框,所以如果不想彈框讓程式卡住的話就需要用 ...
  • WPF常用的第三方控制項集,DevExpress 下麵介紹如何生成Chart界面: DevExpress官方下載地址 ...
  • ContextMenuStrip是就是所說的右鍵菜單,在VS里可以直接新建,挺方便。但是跟著師父看了很多代碼,發現了好多時候都需要自己寫這部分代碼。這個部分目前為止我瞭解的還不是很多,更細緻的就只有等後面再深入瞭解到了再記了。 現在是將contextmenustrip綁定到label上面去,新建了一 ...
  • ...
  • 在很多人或許很多技術大神都會覺得IIS的安裝和4.0沒得先後順序的。其錯誤弊端在與IIS沒有註冊到4.0上。 經過今天遇到了伺服器安裝服務端發覺報錯【無法識別的屬性“targetFramework”。請註意屬性名稱區分大小寫。錯誤解決辦法】客戶端報404錯誤,這個時候我們都會覺得沒有找到相對應的路徑 ...
  • 這幾天無意間看到一個關於分頁的帖子,覺得寫得挺好的。關於這些東西,自己一直都是只知道原理,卻沒有真正動手做過,於是研究了一下分頁的原理自己動手寫了一個十分特別非常簡單的分頁程式,在這裡與大家分享一下。 這個程式取數據使用的ado.net,首先先新建一個取數據的類PageDAl 然後記得修改一下web ...
  • 前言 在開發應用程式時,通常只讓程式運行一個實例。所以,就要判斷程式是否已經運行。 下麵是我自己在項目中使用到,封裝好的幫助類。有 普通的 C 應用程式 和 Windows CE 和 Windows Mobile 應用程式使用的方法。 主要是通過 System.Threading.Mutex 類 和 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...