@標記代碼的轉換字符。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
默認狀況下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>
--找到一種解決方案:
在_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輸出轉義符號@。
使用@或者兩個@@符號轉義輸出@符號。
/////////////////////////////////////////////////////////////////////////////////////
Razor註釋。
使用@* 註釋內容 *@格式在視圖文件中添加註釋。
/////////////////////////////////////////////////////////////////////////////////////
Razor使用泛形方法須要整個代碼使用圓括號括起來。
Example:
@(Html.someMethod<AType>())
後續視圖佈局單獨再寫一個學習筆記。