Razor HTML Html.Raw() 混合输出陷阱与技巧
2017-06-02 11:06
316 查看
属性名称误判
有时候我们必须让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.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的位置替换为变量
<超链接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)这样就会原封不动的输出我们想要的样子。
有时候我们必须让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)这样就会原封不动的输出我们想要的样子。
相关文章推荐
- Razor与HTML混合输出陷阱与技巧
- Linux命令输出头(标题)、输出结果排序技巧
- 格式化输出的技巧
- 【HTML5游戏开发小技巧】RPG情景对话中,令文本逐字输出
- Debug技巧-------控制台程序或者应用程序输出错误到txt
- 平面设计输出十大陷阱
- 技巧和诀窍:使用ASP.NET 2.0 输出缓存替换的功能实现“甜圈缓存(Donut Caching)”
- jsp 页面上图片分行输出小技巧
- MySQL技巧-EXPLAIN输出格式
- [转载][翻译]Go的50坑:新Golang开发者要注意的陷阱、技巧和常见错误[1]
- c语言 在控制台输出随机大小字母混合,5*5*5格式
- 翻唱音乐音频输出专业技巧
- C陷阱篇之有/无符号数混合时自动类型转换
- xcode调试技巧(预处理器控制输出打印信息)
- 报表输出的技巧二则
- Delphi 技巧改造HINT的输出方式
- ACM必学]文件输入输出技巧:freopen这样用也行
- [转载][翻译]Go的50坑:新Golang开发者要注意的陷阱、技巧和常见错误[1]
- 修改glog源码解决不同级别日志混合输出的问题
- UVa 11100 The Trip, 2007 (贪心&一举两得的输出技巧)