嗷~小弟我又出現了~咳咳..嚎過頭了, 先說一說為什么寫這個吧,~首先肯定是我自己需要學(廢話 - -,)//,之前也寫過MVC4的項目,嗯..但是僅限於使用並沒有很深入的每個模塊去了解,
這段時間拜讀了湯姆大叔的MVC6,感覺改進很多啊~嗯...但是MVC6咱們..暫時還用不上..所以還是回到主題,MVC5..
MVC5按照官方的解釋,嗯..通俗點就是,我很屌,我和MVC4不一樣,我們僅僅是名字差不多而已,我不是MVC4的版本升級..(咳,然並卵)...
切入主題,今天我們就先來了解了解Razor視圖.
我們初步了解一下,Razor視圖是在MVC3中加入的新玩法,嗯..注意MVC1 2 都是和Webform那種蛋疼無比的寫法,那么,問題來了,挖掘機技術哪家強?!(艹,什么鬼,.. 呃,是視圖在MVC中到底是做什么的呢?)...
視圖的作用,就是向用戶提供用戶界面~,(這是廢話 - -,),重點在后面,視圖不同於之前的webform那種基於文件的框架,他不會直接被訪問,而且游覽器也不能直接指向一個視圖的地址去渲染他...(嗯..我們的視圖還是很傲嬌的!!!).
由於視圖的傲嬌,所以需要我們必須通過控制器去渲染他,好吧,其實是視圖所用的數據都是由控制器提供的..不走控制器..視圖顯示毛線..渲染流程如下圖(請無視這稀爛的繪圖工具..):
上面大概展示了視圖的作用..下面我們就來用用傲嬌的它
視圖常用的一些數據字典.
ViewBag,ViewData,ViewDataDictionary,任意強類型..
嗯,這里我們暫時不提強類型的,后面講模型的時候在來將,
下面我們看個實例,代碼如下:
//我們在Test控制器中,用三種方式來給視圖的Data賦值.. public class TestController : Controller { // // GET: /Test/ public ActionResult Index() { ViewBag.Name = "我的MVC測試"; ViewData["name"] = "ViewData測試"; ViewData.Add("age", "10"); return View(); } }
視圖Index的代碼如下:
@{ ViewBag.Title = "Index"; } <h2>@ViewBag.Name</h2> <h2>@ViewBag.name</h2> <h2>@ViewBag.age</h2> <h2>@ViewData["name"]</h2> <h2>@ViewData["Name"]</h2> <h2>@ViewData["age"]</h2>
最終的顯示效果如下:
我們發現,.第一個
ViewBag.Name 被ViewData["name"]給覆蓋了,
而且我們不管是用ViewBag 還是ViewData賦值,都可以用互相調用對方的屬性,很顯然,他們都是調用的視圖中的ViewDataDictionary類型的屬性..
ViewData,ViewBag只不過是提供給我們的兩種調用的方式,且不區分大小寫,且這兩種方式在性能上...好像也沒多大區別,我這里就不測了,歡迎大神給結論,
好了,廢話不多說,我們進入下個環節,通過上面的實例,我們可以知道Razor視圖中,最關鍵的就是這個@符~所以我們直接進入@符詳解(也就是Razor的語法示列)..
1.隱式代碼表達式:
其實就是最常用,最簡潔的,@后面接上你要調用的類型..屬性..值..就OK了...
<span>@Model.aaaa</span>
注意: 這里要說明的是,@后面會根據"<"來判斷是否結束了這個表達,所以會有些特殊的場景出現BUG 比如如下代碼..
@{string name = "啪啪啪~";} <span>@name.asd</span>
我們本來想顯示 啪啪啪.asd..這個字符串,結果編譯出錯了,Razor視圖因為沒有碰到"<"所以把asd認為這是name的屬性..,所以我們需要下面的,顯式代碼表達式,
2.顯式代碼表達式:
嗯..就是@(),括號中括號中可以寫一些基礎的計算,當然也可以調用屬性..值..什么的..
<span>1+1=@(1+1)</span>
上面的問題就迎刃而解了,如下的代碼編譯就通過了~
@{string name = "啪啪啪~";} <span>@(name).asd</span>
3.無編碼代碼表達式
嗯..Razor視圖是相當智能的一個東西,如下代碼:
我們本來想在界面上顯示一個大大的asdasd..結果 - -,成了
@{string name = "<h1>asdasd</h1>";} <span>@(name).asd</span>
效果如下:
我們的H1標簽..直接被視圖編譯成了字符串,哦買噶 - -,直接幫我們防止了XSS腳本注入攻擊~但是,我們自己想用..怎么辦呢..
修改代碼如下:
@{string name = "<h1>asdasd</h1>";} <span>@(Html.Raw(name)).asd</span>
結果如下:
嗯,達到了預期的效果,那么..這個Html.Raw()的方法...你們懂的,我就不說了..
4.代碼塊
其實我們上面的實例已經用到了,代碼如下: 關鍵方法 @{//Dosoming}
5.文本和標記相結合
詭異的是..這里的標簽不會被編碼掉~嗯..所以說他智能嘛..(咳咳,不賣萌了..)
@for (int i = 0; i < 5; i++) { <span>哈哈</span> }
6.轉義符代碼分隔符
大家都知道..在C#里面如果要在字符串里顯示""..是要加上轉義符的,我們這個視圖..嗯..關鍵字就一個@~那么我們如何顯示@符呢 - -,
代碼如下:
<span>@@</span>
哈哈哈哈...多加一個@轉義就行了 - -,
7.服務器端注釋
注釋...我就不說了..你們懂的...年輕的騷年~!做一個有節操的程序員喲~~
代碼如下:
@*這里是注釋內容~*@
我們生成MVC模版里面可以看到這么一個東西,
_ViewStart.cshtml
我們簡單的來講講這個是什么,通俗的來說..這玩意..就是母版頁啦..
這個視圖會優於他存在的Views文件夾中所有的視圖執行..然后..他可以指定一個母板頁面,最后 你們都懂了 - - ...我就不說了..
當然,微軟不會這么不智能,有些視圖我們不需要母版頁,那我們就可以用這個方法返回,代碼如下:
public ActionResult Index() { ViewBag.Name = "我的MVC測試"; ViewData["name"] = "ViewData測試"; ViewData.Add("age", "10");
//這里 返回部分視圖 return PartialView(); }
這一篇詳細的了解了在MVC3之后出現的Razor視圖的一些基本使用方式,了解了一下他的內部情況,下次我們來了解MVC中的模型~,感謝各位大大的支持,本篇結束...