如何在对WebApi控制器的AJAX调用中查询数据库

本文关键字:调用 AJAX 查询 数据库 控制器 WebApi | 更新日期: 2023-09-27 18:14:02

我正在开发一个c# . net应用程序。

我有一个网页的特点是一个搜索栏。当用户开始输入时,我使用Jquery Keyup函数自动调用Webservice(我使用扩展ApiController的Controller调用)。

web服务的目的是根据用户在搜索栏中输入的内容,将数据库中的数据列表返回给视图。

如果用户输入字母"A",那么在Webservice函数中,我将查询数据库中名称以字母"A"开头的所有对象。

我的问题是如何将我的代码更改为正确的JSON格式,以便它可以返回到视图。此刻我的查询返回IQueryable。Ajax可以很好地调用下面的代码。

所以,我认为问题在下面的Action方法里面。参数"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);
}

更新:为了扩展我的问题,我想知道如何将数据库查询的结果更改为字符串,以便我可以将其传递给视图。因为这是一个Ajax请求,我不能直接传递DB结果。

如何在对WebApi控制器的AJAX调用中查询数据库

我不确定你是否从这段代码中得到一个错误,或者如果你收到任何客户端。

假设您没有错误,并且您正在接收空JSON数组,我认为您应该显式地将结果转换为带有. tolist()的列表,以确保您从数据库中获取数据。(只要你不要求从车辆中获取物品,它就不会被加载)

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

我还删除了一些不需要的部分你的查询

搜索精确匹配将返回比部分匹配更少的结果。将所有内容放在相同的大小写上是一个好主意,因为它消除了用户输入和数据集之间的所有差异,但随后您必须选择小写或大写(因为它们会给您相同的结果)

编辑2:

我不能评论,因为我的名气太小了,所以下面是答案:

添加以下

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

当您返回车辆列表时,您只想获得品牌的名称,只需替换为相应的字段名称。