• 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)这样就会原封不动的输出我们想要的样子。
  • 相关阅读:
    Python()- 面向对象的组合用法
    HASHMAP 深入解析
    java深入解析
    centos 防火墙关闭/开启
    idea讲web项目部署到tomcat,热部署
    idea真不习惯啊
    JetbrainsCrack
    js 模块化
    JavaWeb中session创建与销毁的问题
    前端导出文件功能document.execCommand命令
  • 原文地址:https://www.cnblogs.com/jinhaoObject/p/4597670.html
Copyright © 2020-2023  润新知