asp.net web開發框架,ASP.NET MVC Razor視圖引擎

 2023-12-06 阅读 30 评论 0

摘要:本篇文章我們一起來討論ASP.NET MVC框架中的Razor視圖引擎。主要包含以下內容: Razor簡介Razor語法Razor如何呈現頁面布局頁(Layout)asp.net web開發框架,Razor簡介 Razor是微軟在ASP.NET MVC3中加入的新的視圖引擎,由于Razor簡單易用并且功能強大,迅速

本篇文章我們一起來討論ASP.NET MVC框架中的Razor視圖引擎。主要包含以下內容:

  1. Razor簡介
  2. Razor語法
  3. Razor如何呈現頁面
  4. 布局頁(Layout)

asp.net web開發框架,Razor簡介 Razor是微軟在ASP.NET MVC3中加入的新的視圖引擎,由于Razor簡單易用并且功能強大,迅速得到了大家的認可。但是,為了兼容以前的代碼,之前的ASPX視圖引擎(或稱為Web Forms 視圖引擎)還可以繼續使用。

需要說明的是,在一個組織良好的ASP.NET MVC項目中,Action和View是有明確的分工的。Action方法負責獲取數據并傳遞給View,但不關心如何來呈現數據。View負責如何呈現數據,但不關心數據從哪里來,更不直接調用相關的業務方法來直接獲取數據。

Razor語法 在行內嵌入一個表達式

現在是 @DateTime.Now.ToString()

今年是 @DateTime.Now.Year 年

1 2 嵌入一個代碼段 @{ string myString="hello,world"; int year=DateTime.Now.Year; } 1 2 3 4 在這個代碼段中可以聲明變量,這些變量在這個視圖的任何位置都可以訪問,例如

@myString

今年是 @year 年

1 2 嵌入循環或判斷 @if (ViewBag.ProductCount == 0) { @:Out of Stock } else if (ViewBag.ProductCount == 1) { Low Stock (@ViewBag.ProductCount) } else { @ViewBag.ProductCount } 1 2 3 4 5 6 7 8 9 注意: 在邏輯語句中,’@:’可以用來直接輸出純文本 @foreach (Product p in productList) { @p.Name $@p.Price } 1 2 3 4 5 6 7 8 引用命名空間 如果需要在視圖中引用某個命名空間,可以

@using System.IO 1 強類型視圖 如果一個視圖被定義成強類型的,通過下面的方式來指定:

@model Razor.Models.Person 1 指定為強類型視圖后,該視圖中便可以通過@Model來接受Action傳遞過來的對象,例如:

@Model.Name @Model.Age 1 2 Action方法返回強類型視圖的方式如下

public ActionResult GetPerson() { Person person=new Person(); person.Name="Tom"; person.Age=23; return View(person); } 1 2 3 4 5 6 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(" "); Write(name); WriteLiteral("\r\n"); } } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 我們可以看出來,這個類繼承自System.Web.Mvc.WebViewPage< T>,強類型的視圖應該是這么實現的。還能看出WriteLiteral這個方法會向瀏覽器輸出HTML標簽。 至于編譯后的文件的存放位置,在ASP.NET MVC3時,還能在Temp文件夾中找到.cs文件,在MVC4時就不知道去哪里了,可能新的Razor視圖引擎在編譯完成以后會刪除源文件吧。不管怎么樣,這個不重要,不影響Razor視圖引擎的正常工作。

布局頁(Layout) Layout比較類似于WebForm中的母版頁,可以很輕松地是網站擁有相似的外觀,并且很好地提高了代碼的內聚性。

創建布局頁 右擊Views文件夾或Views的子文件夾,選擇 ”添加“=>”新建項“=>”MVC4 布局頁”,然后輸入名字點擊確定,布局頁就創建好了,代碼如下

@ViewBag.Title
@RenderBody()
1 2 3 4 5 6 7 8 9 10 11 12 13 當其它視圖使用該布局頁時,會將代碼嵌入到該布局頁的 @RenderBody 處。

使用布局頁 在視圖中指定使用的布局頁

@{ Layout="MyLayout"; } 1 2 3 4 使用View Start文件 一般情況下,一個布局頁會被很多視圖使用,如果手動設置每個視圖的Layout屬性,會很麻煩,并且出現了重復代碼,不利于重構。MVC框架在呈現一個視圖之前,會先在Views文件夾中查找一個名叫_ViewStart.cshtml的文件,這個文件會被認為是視圖文件的一部分。一般在這個文件中指定一個默認的Layout頁面,如果視圖文件不專門對Layout屬性賦值的話,該視圖就默認采用ViewStart文件中的布局頁。當然,視圖頁面可以通過以下方式來指定該視圖不使用布局頁或使用其它布局頁 不使用布局頁

@{ Layout=null; } 1 2 3 使用其它布局頁

@{ Layout="OtherLayoutPath"; } 1 2 3 如果在新建MVC項目是選擇”Internet應用程序“這個模板,那么項目模板會在Views文件夾下包含一個名為_ViewStart.cshtml的文件,代碼如下

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

作者:kite___ 來源:CSDN 原文:https://blog.csdn.net/daguanjia11/article/details/44942075 版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

轉載于:https://juejin.im/post/5c7a36416fb9a049f81a011d

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/189586.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息