返回json mvc时如何忽略逗号

时间:2010-04-01 18:44:45

标签: jquery asp.net-mvc autocomplete split

我将JSON从我的控制器返回到我的视图,以便在MVC中填充jquery自动完成文本框。问题是,我的一些数据包含逗号,因此被自动完成帮助程序拆分。

继承我的代码。

控制器:

    public ActionResult GetData()
    {
        var data = repository.GetData();

        return Json(data);
    }

查看(脚本):

    $.post("../MyController/GetData",

        function(data) {
        var evalData = eval(data) + ""; //formats the text

        $("#Data").autocomplete(evalData.split(","),
        {
            max: 500,
            matchContains: true
        });
    });

如您所见,我使用jquery .split帮助器来拆分返回的Json。我应该使用正则表达式还是应该使用完全不同的方法?

2 个答案:

答案 0 :(得分:1)

我假设您使用Autocomplete内置的jQuery UI 1.8。如果你是,你有几个不同的选择。

  1. 根据文档中提供的其中一个示例,您可以给它一个字符串,指定您的服务的URL,而不必担心自己解析返回。所以有些东西:

    $("#Data").autocomplete({
        source: "../MyController/GetData"
    });
    

    您的操作很可能需要回复获取请求以及发布信息,您的数据可能需要采用[{ label: "something", value: "1" }, ... ]的形式 在发送数据之前,您可以使用Linq查询对数据进行整形。

    var data = from d in repository.GetData()
               select new
               {
                   label = d.[whatever you want the label to be]
                   value = d.[whatever you want the value to be]
               };
    return Json(data);
    
  2. 您可以将当前的实现与上面示例的部分内容结合起来,得到如下内容:

    $.post("../MyController/GetData",
        function(data) {
            $("#Data").autocomplete({
                source: JSON.parse(data),
                max: 500,
                matchContains: true
            });
        });
    

    这假设数据采用[{ label: "something", value: "1" }, ... ]的形式(有关如何使用Linq对其进行整形,请参阅1)。 JSON解析器将为您处理引号问题中的逗号。

  3. 您还可以在要检索数据时指定method to call

    $("#Data").autocomplete({
        source: function(request, response) {
            $.ajax({
                url: "../MyController/GetData",
                dataType: "json",
                success: function(data) {
                    response( data );
                }
            })
        }
    });
    

    (参见上文关于如何使用Linq来整形数据)

  4. 关于您当前实施的一些评论。

    • 您应该考虑使用UrlHelper而不是对网址进行硬编码,以防您更改路线。

    • 您应该使用eval JSON2.js来解析操作中的返回值,而不是library。它通常会多一点secure,并且在支持native JSON parsing的较新浏览器中会产生更好的性能。

答案 1 :(得分:0)

好吧,经过多次来回和几次编辑是我的最终答案。 :)

    $.post("../MyController/GetData", function(data) {
        $("#Data").autocomplete({
            source: data
        })
    });

另外,我相信split函数是普通的javascript而不是jquery。