MVC5學習系列


前言

嗷~小弟我又出現了~咳咳..嚎過頭了, 先說一說為什么寫這個吧,~首先肯定是我自己需要學(廢話 - -,)//,之前也寫過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}

復制代碼
@{string name = "<h1>asdasd</h1>";
  int a = 1;
  for (int i = 0; i < a; i++)
  {
      
  }
  }
復制代碼

 

 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中的模型~,感謝各位大大的支持,本篇結束...

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM