Asp.net MVC4高級編程學習筆記-視圖學習第二課Razor視圖引擎20171010
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><script>alert('alert' </script></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標簽打印顯示到頁面上,而不是彈出對話框,但又不能像默認那樣出現轉碼符號<,>,如有人知道還請告知,謝謝!
以上這種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輸出轉義符號@。
使用@或者兩個@@符號轉義輸出@符號。
/////////////////////////////////////////////////////////////////////////////////////
Razor註釋。
使用@* 註釋內容 *@格式在視圖文件中添加註釋。
/////////////////////////////////////////////////////////////////////////////////////
Razor使用泛形方法需要整個代碼使用圓括號括起來。
Example:
@(Html.someMethod<AType>())
後續視圖布局單獨再寫一個學習筆記。
Asp.net MVC4高級編程學習筆記-視圖學習第二課Razor視圖引擎20171010