2016-10-20 2 views
0

Я работаю над приложением C# .NET.Как вы запрашиваете базу данных в вызове AJAX контроллеру WebApi?

У меня есть веб-страница с панелью поиска. Когда пользователь начинает печатать, я использую функцию JQuery Keyup для автоматического вызова Webservice (я использую вызов Controller, который расширяет ApiController).

Точка Webservice - это вернуть список данных из базы данных в представление, основываясь на том, что Пользователь ввел в панель поиска.

Если пользователь набирает букву «A», то внутри функции Webservice я буду запрашивать базу данных для всех объектов, имя которых начинается с буквы «A».

Мой вопрос заключается в том, как изменить код в правильный формат JSON, чтобы он мог быть возвращен в представление. В настоящий момент мой запрос возвращает IQueryable. Нижеприведенный код называется Ajax.

Итак, я считаю, что проблема внутри метода действий ниже. Параметр «term» - это буква, которую пользователь вводит в панель поиска.

[System.Web.Http.HttpGet] 
public JsonResult GetAllofTheProducts(string term) 
{ 
    //var JsonArray = Json.stringify(products); 

    List<string>vehicle; 

     vehicle = db.Vechicle.Where(v => v.CarName.Equals(term) || v.CarName.ToLower().Contains(term.ToLower()) || v.CarName.ToUpper().Contains(term.ToUpper())); 

     //var json = new JavaScriptSerializer().Serialize(result);  
    // return json;  
    return Json(vehicle); 

} 

Update: Чтобы расширить на мой вопрос, я хочу знать, как изменить результат моего запроса к базе данных в строку, так что я могу передать его просмотра. Поскольку это запрос Ajax, и я не могу напрямую передать результат DB.

+0

Что нужно? вам просто нужно преобразовать ваш «автомобиль» в json и вернуть его. –

+0

Изменить 'Список vehicle;' to 'Список vehicle;' –

+0

Уверенный, что сработал, я буду тестировать его сейчас – hoChay

ответ

0

Я не уверен, что вы получаете ошибку из этого кода или получаете что-либо на стороне клиента.

Предполагая, что у вас нет ошибки, и вы получаете пустой массив JSON, я думаю, вы должны явно указать свой результат как список с .ToList(), чтобы убедиться, что вы получаете данные из базы данных. (До тех пор, пока вы не попросите, чтобы получить элемент из автомобиля, он не напиваться)

vehicle = db.Vechicle.Where(v => v.CarName.ToLower().Contains(term.ToLower())).ToList(); 

Также я удалил некоторые не нужны часть вашего запроса

Searching для точного соответствия будет возвращает меньше результатов, чем частичное совпадение. Помещение всего на один и тот же случай - хорошая идея, так как это устраняет все различия между пользовательским вводом и набором данных, но тогда вам нужно выбрать нижний или верхний регистр (как они дадут вам тот же результат)

EDIT 2 :

Я не могу комментировать, как у меня слишком мало репутации, так вот ответ:

Добавьте следующий

vehicle = db.Vechicle.Where(v => v.CarName.ToLower().Contains(term.ToLower())).Select(v => v.<NAME>).ToList(); 

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

+0

Я получаю запрос на стороне сервера. Я просто получаю эту ошибку: – hoChay

+0

не может неявно преобразовать список типов в строку hoChay

+0

На самом деле я могу прокомментировать мой собственный пост, добавить следующее перед .ToList(): .Выбрать (v => v. ) и заменить с полем, которое вы ищете – Drizzt

Смежные вопросы