【问题标题】:JavaScriptSerializer to serialize a javascript function nameJavaScriptSerializer 序列化 javascript 函数名
【发布时间】:2012-09-12 12:16:54
【问题描述】:

我在我的项目中使用 Flexigrid 在网格工具栏上添加一个按钮我可以使用如下代码:

...    
"buttons":[
    {"name":"Modifica","bclass":"edit","onpress":"doCommand"},
    {"name":"Elimina","bclass":"delete","onpress":"doCommand"}
],
...

无论如何,“onpress”属性应包含对 js 回调的引用,因此该字段不应包含在引号内。

我正在使用 JavaScriptSerializer 类(在 System.Web.Script.Serialization 命名空间中)进行序列化。

我必须如何声明变量才能使 JavaScriptSerializer 像这样序列化?

...    
"buttons":[
    {"name":"Modifica","bclass":"edit","onpress":doCommand},
    {"name":"Elimina","bclass":"delete","onpress":doCommand}
],
...

感谢您的帮助!

【问题讨论】:

    标签: asp.net json html-helper javascriptserializer


    【解决方案1】:

    这个技巧怎么样?

    var param = new Dictionary<string,string>();
    
    param["onpress"] = "%doCommand%";
    
    return new JavaScriptSerializer().Serialize( param ).Replace( "\"%", "" ).Replace( "%\"", "" );
    

    【讨论】:

      【解决方案2】:

      据我所知,.NET 序列化程序并没有本地方法来执行此操作,但您可以在客户端执行以下代码将onpress JSON 字符串转换为回调。 .

      var buttons = []; // Your JSON array
      for(var i = 0; i < buttons.length; i++) {
        var b = buttons[i];
        b.onpress = window[b.onpress];
      }
      

      【讨论】:

      • 那里需要评估吗? window[oldOnPress]() 应该可以工作吗?
      • 你也不需要外部函数。就b.onpress = window[b.onpress];
      • 好!无论如何,我没有采用这种方法,因为我希望将所有内容都打包在我的 HTML 帮助程序扩展中。因此,我更改了扩展程序中的代码,以执行与您的建议非常相似的操作。谢谢!
      【解决方案3】:

      JavaScriptSerializer 是用来序列化为 JSON 的,JSON 不能代表函数;它也不能引用先前定义的变量。所以我不相信这是可能的。

      【讨论】:

      • 嗯...你是对的。但是我习惯于为网格声明构建一个流畅的界面。有没有办法做到这一点?
      • @Lorenzon,可能有一种方法可以获得您想要的 JavaScript 输出,但不能单独使用 JavaScriptSerializer。
      【解决方案4】:

      您可以将函数名存储为字符串

      ...    
      "buttons":[
          {"name":"Modifica","bclass":"edit","onpress":"doCommand"},
          {"name":"Elimina","bclass":"delete","onpress":"doCommand"}
      ],
      ...
      

      【讨论】:

      • 这是不正确的。如果您阅读了我的问题,它们已经存储为字符串,这不起作用,因为插件想要引用函数而不是函数名... ;)
      猜你喜欢
      • 2012-09-20
      • 1970-01-01
      • 2021-12-16
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多