我正在开发一个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结果。
答案 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();
当您返回车辆清单时,您只想获得品牌名称,只需替换相应的字段名称。