我在我的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的变种而没有太多运气。我已经尝试过数组,自定义对象等等。我只是没有得到它。我确定它非常
编辑:应该说“我确定这很容易。”
答案 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;
}