gpt4 book ai didi

javascript - MVC 5 中的数据库自动完成?

转载 作者:行者123 更新时间:2023-11-28 19:39:49 24 4
gpt4 key购买 nike

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

@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>
}

所以,重点是,当用户开始输入服务名称时,在 2 个字母之后,我想向用户显示建议,并使用自动完成功能。我已经包含了 jQuery UI,如果我手动将自动完成源作为 JS 数组提供,它就可以正常工作。但是,我希望从数据库中读取源代码。为此,我创建了以下函数:

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

return results;
}

然后在我的 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() 函数有一条错误消息。我在返回语句中收到一条消息:Cannot explicitly convert type List<AnonymousType> to 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 不需要 POST 此请求,因此我将其更改为 GET。总的来说,我建议将您的 jQuery 更改为这样的内容来测试:

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

关于javascript - MVC 5 中的数据库自动完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25311447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com