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

时间:2016-10-20 09:24:01

标签: c# ajax web-services asp.net-web-api

我正在开发一个C#.NET应用程序。

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

Webservice的重点是根据用户在搜索栏中输入的内容,将数据列表从数据库返回到View。

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

我的问题是如何将代码更改为正确的JSON格式,以便将其返回到View。目前我的查询返回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);

}

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

1 个答案:

答案 0 :(得分:0)

我不确定您是否从此代码中收到错误,或者您是否收到了客户端的任何内容。

假设您没有错误,并且您正在接收一个空的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();

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