处理$. parsejson中的特殊字符
本文关键字:特殊字符 parsejson 处理 | 更新日期: 2023-09-27 18:02:32
. net应用程序我从数据库中获取值的字典,并将它们从代码传递到脚本。我在脚本中访问这些值为
var dictionary = $.parseJSON('<%=DictionaryJson %>');
这里DictionaryJson是从asp.net传入的,像这样传入
public string DictionaryJson
{
get
{
//i'm getting dictionary information into Dictionaryinformation then
JavaScriptSerializer jSer = new JavaScriptSerializer();
return jSer.Serialize(Dictionaryinformation);
}
}
,当应用程序运行并获取DictionaryJson值时,如下所示
var dictionary = $.parseJSON('{"Name1":"Description1","Name2":"Description2"}');
传入DictionaryJson的数据已经被解析,但我正在使用另一个语句'
var data = eval(DictionaryJson);
如果我不使用$。并使用以下代码
var dictionary ='<%=DictionaryJson %>';
var data = eval(DictionaryJson);
则eval抛出一个错误,说缺少';'
但是如果我使用$。当Name1,Name2,Description1,Description2中的任何一个包含任何特殊字符,如单引号(')或反斜杠()时,该语句抛出错误。这是抛出错误。我想解决这个特殊字符的情况,但我仍然希望它们在文本中存在,因为它们是一部分,比如Name1可能像Id/Number。
我通常使用以下方法
public static MvcHtmlString WriteVariables(this HtmlHelper helper, Dictionary<String, Object> values, Boolean writeVar = true) {
var sb = new StringBuilder("<script type='"text/javascript'">//<![CDATA['r'n");
var seriazlier = new JavaScriptSerializer();
if (writeVar)
sb.Append("var ");
for (var i = 0; i < values.Count; i++) {
var key = values.Keys.ElementAt(i);
sb.Append(key).Append("=");
var currentVal = seriazlier.Serialize(values[key]);
sb.Append(currentVal).Append(i < values.Count - 1 ? "," : ";");
}
sb.Append("//]]></script>");
return MvcHtmlString.Create(sb.ToString());
}
,并按如下方式使用
@WriteVariable(new Dictionary<String, Object>{
{"MyVar", "SomeStr"},
{
"ComplexObject", new {
Property = true
}
}
});
在JavaScript中我可以这样使用
DoSomething(window.MyVar);
DoAnotherThing(window.ComplexObject.Property);
这给了你对c# <=> JavaScript传输的强类型控制。
目前我正在使用Razor,但它完全适用于ASPX视图引擎