如何将数据传递给JsonResult,以便正确格式化

时间:2011-10-13 19:02:52

标签: asp.net-mvc asp.net-mvc-3 asp.net-ajax

我在我的MVC应用程序中使用MooTools TextboxList来创建自动完成标记建议器,类似于StackOverflow建议器。

该脚本使用Json来完成建议。它似乎期望的Json字符串与我能够生成的字符串不同。从脚本的演示中,它看起来应该是这样的:

[[32,"Science",null,null]]

但我无法弄清楚如何让字符串从MVC中出来。最好我看起来更像:

[{"id":11,"text":"Science"}]

显示实际的字段名称。

这是我的控制器方法:

   public JsonResult Suggest(string search)
    {
        JsonResult jsonresult = new JsonResult();

        var tags = from t in db.Tags
                         where t.Text.Contains(search)
                         select new {id=t.TagID, text=t.Text};

        var result = DoSomethingTo(tags); // <---????????

        jsonresult.Data = result;

        jsonresult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;

        return jsonresult;
    }

我已经尝试了几种将变量传递到JsonResult.Data的变种而没有太多运气。我已经尝试过数组,自定义对象等等。我只是没有得到它。我确定它非常

编辑:应该说“我确定这很容易。”

2 个答案:

答案 0 :(得分:3)

它是一组对象数组。你可以像这样生成它:

return Json(new[] { new object[] { 32, "Science", null, null } });

在您的选择操作中,您可以尝试以下方式:

public ActionResult Suggest(string search)
{
    var tags = from t in db.Tags
               where t.Text.Contains(search)
               select new object[] { t.TagID, t.Text };

    return Json(tags.ToList(), JsonRequestBehavior.AllowGet);
}

答案 1 :(得分:0)

基于another question,我最终上了老派...手动构建字符串。

    public ContentResult Suggest(string search)
    {
        var tags = from t in db.Tags
                   where t.Text.Contains(search)
                   orderby (t.Text)
                   select t;

        var builder = new StringBuilder();
        builder.Append("[");
        foreach (Tag tag in tags)
            builder.AppendFormat("[{0}, \"{1}\", null, null]", tag.TagID, tag.Text);
        var result = builder.ToString().TrimEnd(new char[] { ',', ' ' }) + "]";

        ContentResult res = new ContentResult();
        res.Content = result;

        return res;
    }