<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      asp.net mvc3 Razor引擎中@使用規則小記

        項目中前臺用的是asp.net mvc3,Razor引擎(關于Razor的介紹可以參考:http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx),深深體驗到了Razor引擎的方便強大。但在編碼過程中也遇到了一些問題,就是Razor的@標記,這個標記到底什么時候該加什么時候不該加呢?

        先看一段代碼(只是為了說明問題用,沒任何意義)吧:

      代碼一:

       1 <div>
      2 for(int i=0;i<3;i++)
      3 {
      4 </div>i<div>
      5 for(int j=0;j<3;j++)
      6 {
      7 if(j==1)
      8 {
      9 <div>
      10 for(int k=0;k<5;k++)
      11 {
      12 k++;
      13 <span>
      14 k
      15 </span>
      16 }
      17 </div>
      18 break;
      19 }
      20 }
      21 }
      22 </div>

        這一段代碼沒添加任何@標記,肯定是有問題的,你能準確地判斷出這段代碼中哪些地方要添加@標記嗎?看到這里,停幾分鐘,填上你的答案吧:),然后把你的答案跟下面的參考答案做個對比吧,如果你很確定地完成了并且完全正確,那么恭喜你,這個知識點你已經掌握了,下面的內容你可以直接跳過了。

        參考答案:

      參考答案
       1 <div>
      2 @for(int i=0;i<3;i++)
      3 {
      4 @:</div>@i<div>
      5 for(int j=0;j<3;j++)
      6 {
      7 if(j==1)
      8 {
      9 <div>
      10 @for(int k=0;k<5;k++)
      11 {
      12 k++;
      13 <span>
      14 @k
      15 </span>
      16 }
      17 </div>
      18 break;
      19 }
      20 }
      21 }
      22 </div>

        親,做錯的童鞋有木有,有木有。做錯了也沒什么關系啦,我之前也錯了呢,這里給出一個小小的規則(自己定義的,不一定準確,如果已經有專用名詞歡迎大家指出),掌握這個小規則后你就很容易做對了。

        Razor語法中有block(塊)的說法,這個大家應該都不陌生了,就是代碼段,如我們可以把using(){}包起來的代碼叫一個block(段/塊),block內部還可以有block,這個是可以嵌套的。比如上面的示例代碼中我們可以把最外層的for循環內部的代碼(第2行到第21行)是一個block,第4行是一個代碼塊,第二個for循環內部的代碼(第5行到第20行)也可以叫一個block,劃分不是固定的,粒度你可以自己定義。

        block內部的代碼分為兩種,一種是HTML代碼塊,一種是C#(本例中為C#,也可以是其他.NET語言)代碼塊。有了block的概念后,Razor中@標記的規則就是:

      如果同一種代碼塊(HTML代碼塊不需要加@,這里排除開)內部跟的是同類代碼塊,這時不需要加@標記,否則要加@標記

        用這個規則逐一解析一下上面的代碼,在解析之前我的block劃分是這樣的:

        第1—22行,2—21行,第4行,5—20行,7—19行,9—17行,10—16行,12行,13—15行,14行

        我們從里往外看,第14行外層block是HTML代碼,所以第14行要加@,12行外層block也是C#代碼塊,因此不加,以此類推,直到第5行,這一行有點特殊,這個涉及到VS中的標簽匹配。

        我們知道VS能在編碼時對HTML標簽進行匹配,這個匹配只是給出警告,并不是強制的,用了Razor后,混在C#(也可以是其他語言)中的HTML標簽也要進行匹配,只是這個匹配是在代碼塊內部進行的,同時也是野蠻的,如果不匹配就會出錯,例如下面的代碼是通不過的:

      1 <div>
      2 <tr>
      3 @if(true)
      4 {
      5 </tr>
      6 }
      7 </div>

        錯誤頁面:

        改為這樣就好了:

      1 <div>
      2 <tr>
      3 @if(true)
      4 {
      5 <tr></tr>
      6 }
      7 </div>

        那么如果遇到像最開始那段代碼</div><div>這樣進行拼接的HTML怎么辦呢,Razor提供了兩種方案,一是在前面加上“@:”,如 @:</div><div>;一是用@Html.Raw,如:@Html.Raw("</div><div>");

        了解了這點后代碼一第4行就應該這樣:@:</div>@i<div>,第4行沒問題了,最后只剩第5行了,這時直接把第4行忽略,按規則寫就OK了,因為第2行是C#代碼塊,因此第5行不需要添加@。

        好了,寫到這里只剩最后一個點了,如果把代碼一中第4行改為<div>i</div>,那么第5行應該是什么樣的呢?如果Razor內HTML標簽是匹配的,Razor可以識別,這時可以忽略匹配的HTML標簽對即可。

        規則有時并不是萬能的,極個別的還是要經過嘗試,最后說個小小的技巧,可以把Razor代碼背景顏色改一下,這樣就能比較容易地識別了:

        歡迎大家留言討論,給出更優的解決方案。

      posted @ 2011-07-29 13:35  artwl  閱讀(2597)  評論(19)    收藏  舉報

      個人簡介

      var ME = {
      	"name": "土豆/Artwl",
      	"job": "coding",
      	"languages": [
      		"JS", "HTML",
                      "CSS", "jQuery"
      		"MVC",".NET",
      		"設計模式"
      	],
      	"hobby": [
      		"閱讀", "旅游",
      		"音樂", "電影"
      	]
      }
      
      TOP
      主站蜘蛛池模板: 加勒比中文字幕无码一区| 国产精品自拍中文字幕| 开心五月深深爱天天天操| 99久久亚洲综合精品网| 亚洲欧美日韩综合久久| 亚洲精品久久久久国色天香| 日韩一区日韩二区日韩三区| 无码任你躁久久久久久久| 九九久久自然熟的香蕉图片| 国产精品性色一区二区三区 | 裸身美女无遮挡永久免费视频| 亚洲av色在线观看国产| 一本一道av无码中文字幕麻豆| 好男人官网资源在线观看| 亚洲一区二区三区在线播放无码| 免费国产午夜理论片不卡| 日韩av一区二区高清不卡| 欧美成人精品三级网站| 亚洲日韩国产二区无码| 国产精品成人va在线播放| 国产精品美女一区二三区| 秋霞电影院午夜无码免费视频| 蜜臀久久精品亚洲一区| 2021国产成人精品久久 | 亚洲精品日本一区二区| 亚洲一区二区不卡av| 国产精品办公室沙发| 精品国产乱码久久久久久影片| 无码成人午夜在线观看| 亚洲国产精品午夜福利| 国产第一区二区三区精品| 激情国产一区二区三区四区| 国产精品一区二区三区三级| 特黄做受又粗又大又硬老头| 欧美成人片在线观看| 亚洲av色在线播放一区| 国产不卡av一区二区| 最新国产精品好看的精品| 国产精品自在拍在线播放| 国产免费午夜福利在线播放 | 在线精品自拍亚洲第一区|