ASP MVC vs jQuery UI自动完成
我知道这个网站上有几个相同的问题,但即使他们提供了解决方案,我也找不到它。我正在尝试实现jQuery UI自动完成功能来获取搜索功能。ASP MVC vs jQuery UI自动完成
我的控制器:
public JsonResult search(int maxRows, string name_startsWith)
{
DataContext db = new DataContext();
var result = (from p in db.Users where p.UserName.Contains(name_startsWith) || p.FirstName.Contains(name_startsWith) || p.LastName.Contains(name_startsWith) orderby p.LastName select p).Distinct().Take(maxRows).ToList();
return Json(result);
}
我的看法是:
$("#search").catcomplete({
source: function (request, response) {
$.ajax({
url: "/h/search",
dataType: "json",
data: {
maxRows: 15,
name_startsWith: request.term
},
success: function (data) {
response($.map(data, function (item) {
return {
label: item.UserName,
value: item.UserId,
categoty: "People"
}
}));
}
});
}
});
所以,你可以理解;我正在尝试实施类别版本。我很担心这个价值项目。我使用Guid作为UserId。
在此先感谢您的帮助。
EDIT
我通过改变控制取得了一些进展,并查看如下。
控制:
[HttpPost]
public JsonResult search(int maxRows, string name_startsWith)
{
DataContext db = new DataContext();
var result = new List<User>();
result = (from p in db.Users where p.UserName.Contains(name_startsWith) || p.FirstName.Contains(name_startsWith) || p.LastName.Contains(name_startsWith) orderby p.LastName select p).Take(maxRows).ToList();
return Json(result, JsonRequestBehavior.AllowGet);
}
查看:
$("#search").catcomplete({
source: function (request, response) {
$.ajax({
type: "POST",
cache: false,
dataType: "json",
url: '@Url.Action("search", "h")',
data: { maxRows: 15, name_startsWith: request.term },
complete: function (data) {
response($.map(data, function (item) {
return {
label: item.UserName,
category: 'People'
}
}));
}
});
}
});
现在的问题是:当 期待的 “成功” 的行为:它不经常使用。 但是,当我选择“完整”的行为:现在它总是失败,但没有价值?
控制器似乎发布值[count = 1],但json没有收到它!?
解决
[HttpPost]
public JsonResult search(int maxRows, string name_startsWith)
{
DataContext db = new DataContext();
var result = new List<User>();
result = (from p in db.Users where p.UserName.Contains(name_startsWith) || p.FirstName.Contains(name_startsWith) || p.LastName.Contains(name_startsWith) orderby p.LastName select p).Take(maxRows).ToList();
var viewModel = result.Select(x => new
{
value = x.UserName,
label = x.FirstName + " " + x.LastName,
category = "People"
});
return Json(viewModel, JsonRequestBehavior.AllowGet);
}
我通过发送之前打包在一个视图模型的necesessary项目解决了这个问题。我认为模型中的一些不可比较的东西是与json导致这种冲突(500内部服务器错误)。 (解决方法发现在这个职位:https://*.com/a/8027027/1062284谢谢Darin!)
尝试在Firefox中使用FireBug将断点放在完整的事件,并检查从控制器收到的数据。
只有当您获得HTTP 200结果而不是服务器返回错误时,成功行为才起作用。
如果您在Firebug中使用Javascript调试器和/或Net选项卡没有找到答案,那么可以将http调用的响应放到您的问题中,也许我可以看到问题。
感谢您的回答。我尝试过,但无法达到,因为结果是一个空的对象。 Ayhow我找到了合适的解决方案atlast :)无论如何谢谢你 – MrGorki 2012-01-10 13:39:09
我也试图给硬编码的标签,值和类别名称,但它在这种情况下也不起作用。标签:“测试”, value:“2”, 类别:“人物”。但是当我尝试给出一个数组作为源;它工作没有任何问题。 – MrGorki 2012-01-10 11:10:55
你可以删除'var result = new List();'并将它替换为'List result';因为你正在创建一个新的实例。 –
ivowiblo
2012-01-10 12:57:33