C# 处理$.parseJSON中的特殊字符
net应用程序我从数据库中获取一个值字典,并将它们从代码传递到脚本。我在脚本中将这些值作为C# 处理$.parseJSON中的特殊字符,c#,jquery,asp.net,json,C#,Jquery,Asp.net,Json,net应用程序我从数据库中获取一个值字典,并将它们从代码传递到脚本。我在脚本中将这些值作为 var dictionary = $.parseJSON('<%=DictionaryJson %>'); 当应用程序运行并获取DictionaryJson值时,如下所示 var dictionary = $.parseJSON('{"Name1":"Description1","Name2":"Description2"}'); 传递到DictionaryJson的数据已经被解析,但我使
var dictionary = $.parseJSON('<%=DictionaryJson %>');
当应用程序运行并获取DictionaryJson值时,如下所示
var dictionary = $.parseJSON('{"Name1":"Description1","Name2":"Description2"}');
传递到DictionaryJson的数据已经被解析,但我使用的是另一条语句`
var data = eval(DictionaryJson);
如果我不使用$.parseJSON并使用以下代码
var dictionary ='<%=DictionaryJson %>';
var data = eval(DictionaryJson);
var字典=”;
var data=eval(DictionaryJson);
然后eval抛出一个错误,说缺少“;”
但是如果我使用$.parseJSON,那么当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());
}
这为您提供了对C#JavaScript传输的强类型控制
目前我正在使用Razor,但它完全适用于ASPX视图引擎
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
}
}
});
DoSomething(window.MyVar);
DoAnotherThing(window.ComplexObject.Property);