ASP.NET MVC5 高级编程 第3章 视图
參考資料《ASP.NET MVC5 高級編程》第5版
第3章 視圖
3.1 視圖的作用
視圖的職責(zé)是向用戶提供界面。
不像基于文件的框架,ASP.NET Web Forms 和PHP ,視圖本身并不被訪問,瀏覽器,并不能直接指向一個視圖并渲染它。相反視圖被控制器渲染,因為控制器提供了渲染所需要的數(shù)據(jù)。
一般情況下,控制器需要向視圖提供一些信息,所以這會傳遞一個數(shù)據(jù)轉(zhuǎn)移對象,叫做模型。完成這一過程需要兩部分操作,其中一個是檢查由控制器提交的模型對象,另一個是將其內(nèi)容轉(zhuǎn)化為HTML格式。
3.2 視圖的基礎(chǔ)知識
在最簡單的情況中,向控制器發(fā)送一個請求,控制器返還一個視圖。
3.3 理解視圖約定
eg1:約定可以重寫
public ActionResult Index(){return View("notIndex");}eg2:指定完全不同目錄結(jié)構(gòu)中的視圖
public ActionResult Index(){return View("~/Views/Example/Index.cshtml");}tips
在使用這種語法時,必須提供視圖文件的文件擴展名
3.4 強類型視圖
3.4.1 ViewBag
eg1:通過重載的View 方法傳遞模型實例來指定模型
public ActionResult Index(){ var a=0;return View(a);}告知試圖正在使用哪些類型的模型需要使用 @model 來聲明。
對于在視圖中經(jīng)常使用的名稱空間,可以在Views 目錄下的Web.config 文件中聲明。
3.4.2 理解ViewBag、ViewData 和 ViewDataDictionary
從技術(shù)角度來講,數(shù)據(jù)從控制器推送到視圖實際上是使用了一個ViewData 的ViewDataDictionary。
我們可以通過標準字典語法設(shè)置或讀取其中的值
ViewData["CurrentTime"]=DateTime.Now;ViewBag 是ViewData 的動態(tài)封裝器。它利用了dynamic 關(guān)鍵字。ViewBag.CurrentTime 等同于 ViewData["CurrentTime"]
ViewData["CurrentTime"]=DateTime.Now;3.5 視圖模型
eg1:通過ViewBag 填充下拉列表
例一:view 層:@Html.DropDownList("ClassID")Controller 層:ViewBag.ClassID=new SelectList(cb.GetClassModels(),"ID","ClassName");例二:view 層:@Html.DropDownList("TerSystem")Controller 層:List AllFieldValue = new List();List<sys_fieldvalue> sfv = m_Dic.GetOrderByDictionarys("TerminalSystem", "", "", ref msg);if (sfv != null){for (int i = 0; i < sfv.Count(); i++){AllFieldValue.Add(new SelectListItem { Text = sfv[i].V_Text + " ", Value = sfv[i].V_Code });}}ViewBag.TerSystem = new SelectList(AllFieldValue, "Value", "Text");3.6 添加視圖
通過視圖基架模型來構(gòu)建模型和創(chuàng)建基架視圖。
3.7 Razor 視圖引擎
3.7.1 Razor 的概念
Razor 是默認的視圖引擎。Razor 為視圖表示提供了一種精簡的語法,最大限度的減少了語法和額外的字符。
3.7.2 代碼表達式
Razor 中的核心轉(zhuǎn)化字符是"at"符號(@)。有兩種基本類型的轉(zhuǎn)換:代碼表達式和代碼塊。
3.7.3 HTML 編碼
Razor 表達式是使用HTML 自動編碼的。
可以通過創(chuàng)建一個HtmlString 的實例或Html.Raw便捷方法來展示不編碼的HTML標記
當(dāng)在JavaScript 中將用戶提供的值賦給變量時,要使用@Ajax.JavaScriptStringEncode 方法對用戶輸入進行編碼。
3.7.4 代碼塊
代碼塊中的語句(如foreach和if)是不需要使用花括號的
可以通過創(chuàng)建一個HtmlString 的實例或Html.Raw便捷方法來展示不編碼的HTML標記
3.7.5 Razor 語法示例
1,隱式代碼表達式
@model.message
2,顯式代碼表達式
@(model.message)
3,無編碼代碼表達式
html.raw
4,代碼塊
@{}
5,文本與標記相結(jié)合
@{<@(model.message)>}
6,混合代碼與純文本
@if(1>0){<@(model.message)>}
7,轉(zhuǎn)義代碼分割符
@@
8,服務(wù)器端的注釋
@*{<@(model.message)>}*@
9,調(diào)用泛型方法
3.7.6 布局
Razor 視圖有助于使應(yīng)用程序中的多個視圖表示一致的外觀。
可使用布局為網(wǎng)站定義公共模板。公共模板包括一個或多個占位符,應(yīng)用程序中的其它視圖為它提供內(nèi)容。
視圖中的@RenderBody 調(diào)用表示一個占位符,用來標記這個布局的視圖將渲染它們的主要內(nèi)容的位置。
視圖中可能有多個RenderSection ,默認情況下,視圖必須為布局定義的每個RenderSection 提供相應(yīng)內(nèi)容。@RenderSection("Footer")
RenderSection 方法有一個重載版本,允許制定不需要的節(jié)。@RenderSection("Footer",require:false)
判斷RenderSection 是否有定義:IsSectionDefined 方法
3.7.7 ViewStart
Views目錄下的_ViewStart.cshtml文件,指定了一個默認布局。代碼先于任何一個視圖運行,我們可以在它里面對共同的視圖配置進行統(tǒng)一設(shè)置。
3.8 指定部分視圖
不渲染布局。
3.9 小結(jié)
視圖引擎用途非常有限。它們的目的是獲取從控制器傳遞給它們的參數(shù),并生成格式化的輸出。
轉(zhuǎn)載于:https://www.cnblogs.com/llchang/p/5370514.html
總結(jié)
以上是生活随笔為你收集整理的ASP.NET MVC5 高级编程 第3章 视图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: return 关键字 c
- 下一篇: MutationObserver 监听D