Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在MVC5中从数据库自动完成?_Javascript_Jquery_Ajax_Asp.net Mvc_Autocomplete - Fatal编程技术网

Javascript 在MVC5中从数据库自动完成?

Javascript 在MVC5中从数据库自动完成?,javascript,jquery,ajax,asp.net-mvc,autocomplete,Javascript,Jquery,Ajax,Asp.net Mvc,Autocomplete,我有一个名为Service的模型,其中包括几个字段,但对我来说最重要的是ServiceName字段。我的观点如下所示: @using (Html.BeginForm("Test", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) { @Html.AntiForgeryToken() <h4>Create a new request.</h4> <hr /&g

我有一个名为Service的模型,其中包括几个字段,但对我来说最重要的是ServiceName字段。我的观点如下所示:

@using (Html.BeginForm("Test", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken()
    <h4>Create a new request.</h4>
    <hr />
    @Html.ValidationSummary("", new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(m => m.ServiceName, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.TextBoxFor(m => m.ServiceName, new { @class = "form-control", @id = "keywords-manual" })
        </div>
    </div>
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" class="btn btn-default" value="Submit!" />
        </div>
    </div>
}
在我的JS部分,我有以下代码:

$("#keywords-manual").autocomplete({
        source: function (request, response) {
            $.ajax({
                url: "Home/GetServiceNames",
                data: "{ 'keywords': '" + request.term + "' }",
                dataType: 'json',
                type: "POST",
                contentType: "application/json; charset=utf-8",
                dataFilter: function (data) { return data; },
                success: function (data) {
                    response($.map(data, function (item) {
                        return {
                            label: item.value,
                            value: item.value,
                            id: item.id
                        }
                    }))
                }
            });
        },
        minLength: 2
    });
我甚至无法测试这些代码段,因为我的GetServiceNames()函数中有一条错误消息。我在return语句中得到一条消息,它说:
无法显式地将类型列表转换为JsonResult


如果有人能帮我解决这个问题,并告诉我从数据库自动完成的逻辑是否正确(如果不正确,请提供更正),我会很高兴。

这里有一些错误。要修复错误消息,需要将结果转换为Json,如下所示:

return Json(results);
此外,您没有将任何内容传递到操作中。将操作更改为:

public JsonResult GetServiceNames(string term)
{
    var results = db.Services.Where(s => term == null || s.ServiceName.ToLower().Contains(term.ToLower())).Select(x => new { id = x.ServiceID, value = x.ServiceName }).Take(5).ToList();

    return Json(results, JsonRequestBehavior.AllowGet);
}
最后,您的jQuery不需要发布这个请求,所以我将它改为一个
GET
。总的来说,我建议将jQuery更改为以下内容以进行测试:

$("#keywords-manual").autocomplete({
  source: "/Home/GetServiceNames",
  minLength: 2
})

这里有一些问题。要修复错误消息,需要将结果转换为Json,如下所示:

return Json(results);
此外,您没有将任何内容传递到操作中。将操作更改为:

public JsonResult GetServiceNames(string term)
{
    var results = db.Services.Where(s => term == null || s.ServiceName.ToLower().Contains(term.ToLower())).Select(x => new { id = x.ServiceID, value = x.ServiceName }).Take(5).ToList();

    return Json(results, JsonRequestBehavior.AllowGet);
}
最后,您的jQuery不需要发布这个请求,所以我将它改为一个
GET
。总的来说,我建议将jQuery更改为以下内容以进行测试:

$("#keywords-manual").autocomplete({
  source: "/Home/GetServiceNames",
  minLength: 2
})

这里有一些问题。要修复错误消息,需要将结果转换为Json,如下所示:

return Json(results);
此外,您没有将任何内容传递到操作中。将操作更改为:

public JsonResult GetServiceNames(string term)
{
    var results = db.Services.Where(s => term == null || s.ServiceName.ToLower().Contains(term.ToLower())).Select(x => new { id = x.ServiceID, value = x.ServiceName }).Take(5).ToList();

    return Json(results, JsonRequestBehavior.AllowGet);
}
最后,您的jQuery不需要发布这个请求,所以我将它改为一个
GET
。总的来说,我建议将jQuery更改为以下内容以进行测试:

$("#keywords-manual").autocomplete({
  source: "/Home/GetServiceNames",
  minLength: 2
})

这里有一些问题。要修复错误消息,需要将结果转换为Json,如下所示:

return Json(results);
此外,您没有将任何内容传递到操作中。将操作更改为:

public JsonResult GetServiceNames(string term)
{
    var results = db.Services.Where(s => term == null || s.ServiceName.ToLower().Contains(term.ToLower())).Select(x => new { id = x.ServiceID, value = x.ServiceName }).Take(5).ToList();

    return Json(results, JsonRequestBehavior.AllowGet);
}
最后,您的jQuery不需要发布这个请求,所以我将它改为一个
GET
。总的来说,我建议将jQuery更改为以下内容以进行测试:

$("#keywords-manual").autocomplete({
  source: "/Home/GetServiceNames",
  minLength: 2
})