后端向前端页面发送变量的方法,可以包含特殊字符(如英文双引号)

摘要:
其次,后端将变量发送到前端页面。如果变量没有特殊字符,例如英文双引号,则可以使用varvalue=“”将其直接传输到前端。但是,如果变量具有特殊字符,例如英文双引号,则不能使用上述方法,或者可以将背景变量序列号再次显示到前端,有时它可以解决问题,但不安全。

处理此问题,方法有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>");是等效的。

免责声明:文章转载自《后端向前端页面发送变量的方法,可以包含特殊字符(如英文双引号)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇shiro-会话管理Fiddler抓包下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android Demo练习体会

前言   由于昨天刚搭建好Android使用环境,非常想体验下Android开发过程,今天下班便在网上找了一些资料,根据资料DEMO做一个小程序来熟悉其开发过程。首先推荐一个网站http://www.inandroid.cn/bbs/forum-15-1.html。里面的内容对于初学还是不错的。为了开发方便API文档是不可少的,但是目前网上还没有中文的,所...

024. asp.net中第一次使用GridView (设置鼠标经过时更换背景色)

1. 前端HTML代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Index.aspx.cs" Inherits="Index" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht...

AvalonDock 2.0+Caliburn.Micro+MahApps.Metro实现Metro风格插件式系统(菜单篇)

  这章主要说插件的菜单,可以说菜单是最核心的部分,前面我们已经实现了Document添加,现在主要就是生成具有层级关系的菜单,以及把菜单跟我们自定义的Document关联起来,也就是MenuPart->View->Model的关联,菜单的实现部分我也是网上参照别人的来实现的,由于代码比较多,我就抽一些重要的来说,其他的只能靠各位自己去体会了,...

Objective-C学习--字符串

C语言将字符串作为简单地字符数组处理,并且在数组最后添加尾部零字符作为结束标志。而Cocoa中的NSString则有很多内置方法,他们让字符串的处理变得简单很多 1. 创建字符串    NSString的stringWithFormat:方法 +(id) stringWithFormat:(NSString *) format, ...;//省略号表示这个...

比NotePad++更好的文本代码(C#)编辑器Sublime Text

前言  前两天在博客园看到@晴天猪的博客发表的关于他使用的代码编辑器,自己索性试了一下,果断好用,自己也来记录一下。以便以后配置使用。接下来我配置的主要是简单的编译C#代码的。 配置一调用C#编译器  我现在电脑的系统为Win7哦。我要将C#编译器的csc.exe文件添加到环境变量中。 首先我的电脑==右键属性==高级系统设置==环境变量==系统变量==变...

Java中equals方法null造成空指针异常的原因及解决方案

正文 bug描述 当查找已修改的与未修改的做比较的时候,之前为null的值调用equals方法与其他值做比较的时候,会导致抛出空指针异常 知识补充 关于null,你不得不知道的几件事: 1、null是Java中的关键字,像public、static、final。它是大小写敏感的,你不能将null写成Null或NULL,编译器将不能识别它们然后报错。 2、...