搜索 mvc json jquery

search mvc json jquery

当我想生成两个值时,我遇到了自动搜索问题

我想在商店中搜索产品,请指导:

控制器

public JsonResult Search(string pr, string name, string model, string brand, string storename) {
    var s = _context.Products.Where(a => a.Name.Contains(pr) || a.Model.Contains(pr) || a.Brands.Name.Contains(pr)).Select(a => new {
        name = a.Name, model = a.Model, brand = a.Brands.Name
    }).Take(10);
    var storen = _context.Stores.Where(a => a.Name.StartsWith(pr)).Select(a => new {
        storename = a.Name
    });
    return Json(new {
        s,
        storen
    }, JsonRequestBehavior.AllowGet);
}

查看

$(document).ready(function () {
    var kam;
    $("#CityName").autocomplete({
        source: function (request, response) {
            $.ajax({
                url: "/Home/search",
                type: "POST",
                dataType: "json",
                data: {
                    pr: request.term
                },
                success: function (data) {
                    response($.map(data, function (item) {
                        return [{
                            label: item.name + " " + item.model + " " + item.brand,
                            value: item.name + " " + item.model + " " + item.brand
                        }]
                    }))
                }
            })
        },
        messages: {
            noResults: "",
            results: ""
        }
    });
})

而不是:

var storen = _context
   .Stores
   .Where(a => a.Name.StartsWith(pr))
   .Select(a => new { storename = a.Name });

您不想像在第一个查询中那样使用 Contains 吗?

var storen = _context
   .Stores
   .Where(a => a.Name.Contains(pr))
   .Select(a => new { storename = a.Name });

我认为您想合并两个结果集以显示在一个自动完成小部件中。因此,为此,请尝试将您的代码修改为如下所示

控制器

public JsonResult Search(string pr) {
    var s = _context.Products.Where(a => a.Name.Contains(pr) || a.Model.Contains(pr) || a.Brands.Name.Contains(pr)).Take(10).Select(a => new {
        resultItem = a.Name + " " + a.Model + " " + a.Brands.Name
    }).ToList();

    var storen = _context.Stores.Where(a => a.Name.StartsWith(pr)).Select(a => new {
        resultItem = a.Name
    }).ToList();

    var returnList = s.Concat(storen).ToList();

    return Json(new {
        returnList
    }, JsonRequestBehavior.AllowGet);
}

这样你的控制器 returns 只有一个 json 格式的结果集。

查看

$(document).ready(function () {    
    $("#CityName").autocomplete({
        source: function (request, response) {
            $.ajax({
                url: "/Home/Search",
                type: "GET",
                dataType: "json",
                data: {
                    pr: request.term
                },
                success: function (data) {
                    response($.map(data, function (item) {
                        return [{
                            label: item.resultItem,
                            value: item.resultItem
                        }]
                    }))
                }
            })
        },
        messages: {
            noResults: "",
            results: ""
        }
    });
})

请注意,我已将 ajax 请求类型更改为 GET 并且标签和值使用相同的 resultItem 字段。