【问题标题】:Handling special characters in $.parseJSON处理 $.parseJSON 中的特殊字符
【发布时间】:2014-05-09 18:26:39
【问题描述】:

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);

如果我不使用 $.parseJSON 并使用以下代码

var dictionary ='<%=DictionaryJson %>';
 var data = eval(DictionaryJson);

然后 eval 抛出一个错误,说缺少';'

但如果我使用 $.parseJSON,那么当 Name1、Name2、Description1、Description2 中的任何一个包含任何特殊字符(如单引号 (') 或反斜杠 ())时,此语句将引发错误。它正在抛出错误。我想解决这个特殊字符的情况,但我仍然希望它们出现在文本中,因为它们的一部分是 Name1 可能类似于 Id/Number。

【问题讨论】:

    标签: c# jquery asp.net json


    【解决方案1】:

    我通常使用以下方法

    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 视图引擎。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      • 2012-11-14
      • 2012-09-18
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多