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

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

space view part scrip for span 通過 文本 電子郵件

Razor視圖引擎

1、常用寫法

@標記代碼的轉換字符。

示例:

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

@{

String rootNameSpace=”MyApp”;

}

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

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

//這裏需要加括號,如果不加括號會識別.後面的Models為rootNameSpace的屬性這樣會報錯。

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

一般電子郵件格式會自動識出來格式,為了防止歧義建議用@@來轉義顯示電子郵件中的@符號。如:[email protected]@126.com

如果有類似電子郵件的格式需要轉換代碼,如下需要增加括號來識別,比如:

<li>[email protected](item.length)</li> //如果去掉括號會當成電子郵件格式連代碼一塊輸出來。

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

@foreach(item in items)

{

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

}

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

如果語句中@符號,如微信中的@某個人,可以使用@@符號轉義輸出。如:

@@吳京,@@小s

2、 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>

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

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>())

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

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