Я знаю, что на этом сайте есть несколько таких же проблем, но я не мог понять это даже с их предложениями решения. Я пытаюсь реализовать функцию автозаполнения пользовательского интерфейса jQuery для получения функции поиска.
Мой контроллер:
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);
}
Я решил проблему, упаковав необходимые элементы в ViewModel перед отправкой. Я думаю, что что-то несопоставимое в модели вызывало этот конфликт (500 Internal Server Error) с json. (Решение найдено на этом посте: https://stackoverflow.com/a/8027027/1062284 Спасибо, Дарин!)