zoukankan      html  css  js  c++  java
  • 后端向前端页面发送变量的方法,可以包含特殊字符(如英文双引号)

    处理此问题,方法有2种,下面的第二种是最先发现的,后来发现第一种更简单,都做一下记录,以备不时之需。

    第一种:

    对于没有特殊字符的后台string变量,输入前台时,直接在后台定义一个protected或public变量,赋值完成后,在前台直接用var value='<%= xxx %>';获取即可。xxx是后台变量名称。

    对于有特殊字符的后台string变量,比如一段html代码,可能包含样式的英文双引号等特殊字符,如果用上面方法前台就会出错了。

    这种情况下可以把包含特殊字符的变量序列化一下,使变量成为一个json对象,然后抛给前台,

    前台用var value=<%= string.IsNullOrWhiteSpace(xxx) ? "0" : xxx%>;来接收,注意此处没有使用引号包含后台变量。如果后台变量xxx是null或空字符串,需要设置为0,否则前台会出现var value=的错误。

    如果xxx正常有值,前台value就是一个正常的json对象,在js端就可以正常按照json来使用后台传入的变量了,最好在使用前判断下value是否为空。

    实例:

    后台:

    public string SysNotificationRecordsJson = string.Empty;

    //变量赋值,PopusMessageContent 是一段html代码,可能包含特殊字符,如英文双引号等,这时就需要特殊处理下。

    var recordList = recordRes.GetList(companyId, employeeID);
    if(recordList != null && recordList.Any())
    {
    SysNotificationRecordsJson = Newtonsoft.Json.JsonConvert.SerializeObject(recordList.Select(p=>new { ID = p.RecordID, Content = p.PopusMessageContent }));
    }

    前台接收值:

    //list

    var contentJson = <%= string.IsNullOrWhiteSpace(SysNotificationRecordsJson) ? "0" : SysNotificationRecordsJson %>;
    if (contentJson) {
    showSysNotification(0, contentJson);
    }


    如果后台的变量不是list,而只是一个string值,但包含特殊字符,最好也把它做成json对象抛到前端,如:

    后台:

    string xxx=string.empty;

    //变量赋值,可能包含特殊字符,序列号为一个json对象抛给前台去接收

    xxx = Newtonsoft.Json.JsonConvert.SerializeObject(new {msg = model.xxx});

    前台接收变量:

    var json = <%= string.IsNullOrWhiteSpace(xxx) ? "0" : xxx %>;
    if (json) {

      alert(json.msg)

    }

    这样就解决了后台传入特殊字符的变量给前台使用的问题,堪称完美!

    其实主要解决方法还是利用了序列号成json时会把特殊符号进行转义的原理,牢记此方法。

    第二种:

    后端向前端页面发送变量,如果变量没有特殊字符,如英文的双引号等可以直接在前端使用

    var value="<%=this.IsHuaMedicineAlertMsg.ToString().ToLower() %>"这种方式输送给前端,

    但如果变量有特殊字符,如英文的双引号(一般是一段html片段,可能会包含样式等会有英文双引号),就不能用上面的方法了,

    或者把后台变量序列号一下再给前台显示,有时可能也能解决问题,但不保险。

    这时就需要后台把这个字符进行序列号再抛给前端来使用,这样也不用在前端再写接收后端变量的代码,

    这样可行的原理是因为序列号时会把特殊字符进行特殊处理,这样前台就可以正常接收了。

    具体如下:

    后端:

    /用各家公司的提示内容的KeyName查找资源文件下单内容,然后转成json抛给前台,因为提示内容是html片段,可能涉及到双引号等,所以需要转成json
    var KeyName = EAPConsts.GetCompanyParameter(companyID, 385);
    var AlertMsg = TCG.ESOP.Resources.MessageResource.ResourceManager.GetString(PlaceOrderAlertMsgKeyName);
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "xxxx", $"window.AlertContent={Newtonsoft.Json.JsonConvert.SerializeObject(AlertMsg)};", true);

    前端直接使用window.AlertContent就好了,如:

    var msg = window.AlertContent;

    备注:Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "xxxx", $"window.AlertContent={Newtonsoft.Json.JsonConvert.SerializeObject(AlertMsg)};", true);

    和Response.Write($"<script type='text/javascript'>window.AlertContent={Newtonsoft.Json.JsonConvert.SerializeObject(AlertMsg)};</script>");是等效的。

  • 相关阅读:
    《C++反汇编与逆向分析技术揭秘》--构造函数 读书笔记
    《C++反汇编与逆向分析技术揭秘》--虚函数 读书笔记
    VPP-main() 源码学习
    【转】几种TCP连接中出现RST的情况
    动态追踪学习
    RCU学习总结
    内核栈回溯原理学习应用
    《C++反汇编与逆向分析技术揭秘》--单类继承 读书笔记
    C# 防火墙操作之创建规则
    C# 防火墙操作之特定程序
  • 原文地址:https://www.cnblogs.com/itjeff/p/10972743.html
Copyright © 2011-2022 走看看