Asp.net MVC4高級編程學習筆記-視圖學習第二課Razor視圖引擎20171010

Razor視圖引擎

一、經常使用寫法

@標記代碼的轉換字符。javascript

示例:html

<h1>hello,it’s @users.count  items.</h1> //這裏會自動識別@users.count爲代碼塊,用空格識別;java

@{安全

         String rootNameSpace=」MyApp」;微信

}mvc

//////////////////////////////////////////////////////////////////佈局

<span> @(rootNameSpace).Models</span>學習

//這裏須要加括號,若是不加括號會識別.後面的Models爲rootNameSpace的屬性這樣會報錯。ui

/////////////////////////////////////////////////////////////////////////編碼

通常電子郵件格式會自動識出來格式,爲了防止歧義建議用@@來轉義顯示電子郵件中的@符號。如:abc@@126.com

 

若是有相似電子郵件的格式須要轉換代碼,以下須要增長括號來識別,好比:

<li>Item_@(item.length)</li> //若是去掉括號會當成電子郵件格式連代碼一塊輸出來。

///////////////////////////////////////////////////////////////////////////

@foreach(item in items)

{

<li> The item is @item.</li> //這裏會識別到.後面爲<符號,不能組成有效的表達式,所以只會自動識別爲@item。這個功能比較好。

}

/////////////////////////////////////////////////////////

若是語句中@符號,如微信中的@某我的,可使用@@符號轉義輸出。如

@@吳京,@@小s

 

二、        HTML編碼

 默認狀況下Razor會自動編碼,如:

@{

string message=」<script>alert(‘hello!’)</script>」

}

<span>@message</span>

 

這裏在執行時不會彈出警告框,而會輸出以下內容:

<span>&lt;script&gt;alert(&#39;alert&#39; &lt;/script&gt;</span>。

/////////////////////////////////////////////////////////////////////////

若是想顯示Html標籤到頁面中,經過兩種方式

1)       建立一個HtmlString 、mvcHtmlString實例或者直接調用mvcHtmlString.Create方法建立

Example:

@(new HtmlString("<script>alert('123')</script>")) //會彈出網頁對話框123

@(new MvcHtmlString("<script>alert('123')</script>"))//會彈出網頁對話框123

@MvcHtmlString.Create("<script>alert('123')</script>")//會彈出網頁對話框123

2)       使用Html.Raw方法

 @Html.Raw("<script>alert('123')</script>") //會彈出網頁對話框123

 

思考:這裏什麼把Html標籤打印顯示到頁面上,而不是彈出對話框,但又不能像默認那樣出現轉碼符號&lt,&gt;,若有人知道還請告知,謝謝!

 

以上這種Razor自動編碼對於javascript腳本中來顯示用戶輸出的信息來講安全性仍是不夠,若是用戶信息參數中存在編碼後的腳本標籤仍是能夠攻擊,所以在腳本中須要使用javascript編碼而不單單是Html編碼。須要使用@Ajax.JavaScriptStringEncode對用戶輸出信息進行編碼。

Example:--這裏注意我在Razor視圖寫的這一句好像沒有執行js代碼,頁面預覽效果仍是顯示Test,不知道有人知道在View中這樣寫存在的問題,提供下正確的解決方法,謝謝!

<div id="message">Test</div>

<script type="text/javascript">

    $(function () {

        var message = 'Hello,@Ajax.JavaScriptStringEncode(ViewBag.UserName)'; 

        $("#message").html(message).show('slow');      

    });   

</script>

 

--找到一種解決方案:

  在_Layout.cshtml通用視圖中添加節點 @RenderSection("scripts", required: false),而後在渲染的視圖以下書寫就能夠正常執行js代碼了,初步判斷應該是頁面加載前後順序問題。

示例代碼:

@section scripts
{
<script type="text/javascript">

$(function () {
var message = 'Hello,@Ajax.JavaScriptStringEncode(ViewBag.UserName)';
$("#message").html(message).show('slow');
});
</script>
}

/////////////////////////////////////////////////////////////////////////////////////

Razor支持代碼塊。

Example:

         @foreach(var item in stuff)

{

               <li>the item name is @item.</li>

}

這個代碼塊自動識別htrml內容,到右邊的}號結束。

寫成一行也能夠識別,如:

@foreach (var item in stuff){    <li>the item name is @item.</li>}

 

多行代碼塊Example:

@{

    string strName = "XiaoHua";

    ViewBag.Title = "用戶信息";

}

 

當調用沒有反回值的方法值時,須要使用代碼塊。

Example:

@{Html.RenderPartial("AboutView");} //若是這裏去掉花括號是報錯的,提示void轉爲object。

 

/////////////////////////////////////////////////////////////////////////////////////

Razor混合代碼和純文本兩種方式。

@if(showMessage)

{

    <text>This is plain text.</text>  //能夠多行使用

}

@*或者*@

@if(showMessage)

{

    @:This is plain text. //不過這裏只能寫一行文本,不能換行。

}

 

/////////////////////////////////////////////////////////////////////////////////////

Razor輸出轉義符號@。

使用&#64或者兩個@@符號轉義輸出@符號。

 

/////////////////////////////////////////////////////////////////////////////////////

Razor註釋。

使用@* 註釋內容 *@格式在視圖文件中添加註釋。

 

/////////////////////////////////////////////////////////////////////////////////////

Razor使用泛形方法須要整個代碼使用圓括號括起來。

Example:

@(Html.someMethod<AType>())

 

 

後續視圖佈局單獨再寫一個學習筆記。

相關文章
相關標籤/搜索