【问题标题】:Serializing JS Functions into JSON for a JsonResult MVC将 JS 函数序列化为 JSON 用于 JsonResult MVC
【发布时间】:2014-10-08 13:38:08
【问题描述】:

我正在为 SlickGrid 编写后端。我有一个 AJAX 调用,它从我的 MVC 控制器加载列定义。控制器如下所示:

Public ActionResult GetColumns(...){
    List<object> columns;
    foreach(var col in MyColumns){
        columns.Add(new { id = col.id, name = col.name, width = col.width});
    }
    return Json(new { columns = columns });
}

slickgrid 接受的列属性之一是 formatter,它采用 js 函数名称。

不幸的是,MVC 将该名称放在双引号中。我需要弄清楚是否有一种方法可以只序列化一个不带引号的字段。

例如(这就是我想要的)

[{"id":1,"Name":"FirstName","width":50,"formatter":NameFormater},...]

vs(这就是我现在得到的)

[{"id":1,"Name":"FirstName","width":50,"formatter":"NameFormater"},...]

我知道这不是正确的 JSON 格式来传递 JS 代码(虽然是正确的 JS 格式)。但我在这里有一个有效的用例,并试图不增加太多的复杂性。

【问题讨论】:

  • and am trying not to add to much complexity 我认为你不能以标准方式做到这一点。
  • 我同意 L.B 的观点,你能不能尝试为 slickgrid 重新格式化 js 文件中的 Json 对象,这很容易

标签: c# asp.net-mvc json slickgrid


【解决方案1】:

你可以用特殊字符来包装单词 NameFormater,例如

[{"id":1,"Name":"FirstName","width":50,"formatter":"#NameFormater#"},...]

当你得到你的结果时,如果你使用的是 javascript

 function(result){

    result = result .replace(/"#/g, "");
    result = result .replace(/#"/g, "");


// result now =  [{"id":1,"Name":"FirstName","width":50,"formatter":NameFormater},...]
//    ...Pass result to SlickGrid

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-09
    • 2020-08-19
    • 2021-11-17
    • 2012-12-28
    • 1970-01-01
    • 2012-06-04
    • 2012-02-04
    • 1970-01-01
    相关资源
    最近更新 更多