Как передать мои данные в JsonResult, чтобы они правильно форматировались - PullRequest
0 голосов
/ 13 октября 2011

Я использую MooTools TextboxList в своем приложении MVC для создания подсказки тегов для автозаполнения, аналогичной подсказке 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 ]

3 голосов
/ 13 октября 2011

Это массив массивов объектов.Вы можете сгенерировать его следующим образом:

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);
}
0 голосов
/ 14 октября 2011

Основываясь на другом вопросе , я закончил тем, что пошел на старом курсе ... строил строку вручную.

    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;
    }
...