Razor與HTML混合輸出陷阱與技巧


3,Razor與HTML混合輸出陷阱與技巧

 
屬性名稱誤判
有時候我們必須讓html內容與razor語句緊接在一起,
eg:       您好,a先生
假設變量名稱為ViewBag.Name,
您好,@ViewBag.Name 先生  //這樣輸出就只有”您好,”,后面的Name 先生被當做是viewbag的屬性去了,所以如果要解決這個問題就是 加個小括號便好,如 “您好,(@ViewBag.Name )先生”
還有一個辦法就是 用一個html標簽包起來,如“您好,<標簽>@ViewBag.Name</標簽>先生”,或者將先生用html標簽包起來,都是可以的。
 
未預期的額外屬性
 如果想要輸出一個c#的命名空間,而輸出的部分北榮要變成razor變量,類別是System.Web.Mvc.Controller
 
eg:
@{
ViewBag.MvcNameSpace="System.Web.Mvc";
}
類別是@ViewBag.MvcNameSpace.Controller
結果輸出會引發錯誤,string未包含controller的定義,原因在於razor解析@ViewBag.MvcNameSpace時把Controller這段當做是@ViewBag.MvcNameSpace的一個Controller屬性,因此解析錯誤,遇到這種情況解決辦法也 是加個小括號,eg: @(ViewBag.MvcNameSpace).Controller,就會輸出“System.Web.Mvc”
 
輸出Email地址與@跳脫子元
<超鏈接a  href="aaabbb@qq.com">aaa</超鏈接a>,也許有人會說@在razor里是個關鍵字,這里應該放兩個@符號,其實不用,razor會自動判斷前后文,只要@的前面和后面都有文字的話,預設這次@就會停用razor語法解析
<超鏈接a  href="aaabbb@qq.com">aaa</超鏈接a>如果要將aaa的位置替換為變量
@{
ViewBag.BlogID="aaa";
}
<超鏈接a  href="@(ViewBag.BlogID)bbb@qq.com">aaa</超鏈接a>,也只要 加個小括號就可以,
 
輸出未經htmlEncode的字串
預設使用razor語法輸出變量,所有內容預設都會被HTML編碼為HtmlEncode,這是為了保護網頁不致遭受跨網站腳本攻擊,有了這個預設值,能確保新手寫出不安全代碼
eg:
@{
ViewBag.Description="<標簽 style='font-size:12px;'>描述文字</標簽>";
}
 
@ViewBag.Description
最后輸出的結果中會是htmlencode過的版本:大於號小於號雙引號都變成了&加一些字母的形式,解決辦法就是利用@Html.Raw輔助方法幫助我們輸出內容  @Html.Raw(ViewBag.Description)這樣就會原封不動的輸出我們想要的樣子。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM