我已经阅读了许多相同问题的帖子,但没有帮助,所以对重复的问题道歉:(我已经通过硬编码值和自动完成工作跟随JQueryUI网站上的简单示例,但我需要它来自我的数据库。
查看:
@Html.TextBoxFor(model => model.Position, new { @type = "text", @id = "jobtitle", @name = "jobtitle", @placeholder = "Job Title" })
JS:
编辑:我在成功时添加了警报,并且正在调用警报,但没有数据(即没有数据从数据库中提取)
<script>
$(function () {
$("#jobtitle").autocomplete({
source: function (request, response) {
$.ajax({
url: '@Url.Action("JobsAutoFill", "Account")',
data: {
Prefix: request.term
},
success: function (data) {
alert(data);
response(data);
}
});
},
minLength: 1
});
//$("#jobtitle").autocomplete({
// source: "/Account/JobsAutoFill/"
//});
});
</script>
我已经添加了所需的链接:
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
以下是我的ActionResult(实际上是JsonResult)&amp;拉取工作列表的功能:
public List<Jobs> GetAllJobs()
{
List<Jobs> JobsList = new List<Jobs>();
using (RBotEntities EF = new RBotEntities())
{
var JobsListQuery = (from ED in EF.EmploymentDetails
select new
{
ED.pkiEmploymentDetailID,
ED.Position
});
foreach (var item in JobsListQuery)
{
JobsList.Add(new Jobs
{
Id = item.pkiEmploymentDetailID,
Name = item.Position
});
}
}
return JobsList;
}
public JsonResult JobsAutoFill(string Prefix)
{
//Note : you can bind same list from database
List<Jobs> ObjList = new List<Jobs>();
ObjList = GetAllJobs();
//Searching records from list using LINQ query
var JobNames = (from N in ObjList
where N.Name.StartsWith(Prefix)
select new { N.Name });
return Json(JobNames, JsonRequestBehavior.AllowGet);
}
我错过了什么或做错了什么?
感谢您的帮助,谢谢!
答案 0 :(得分:13)
我开始工作了!
造成问题的第一件事是我需要在ActionResult上面添加[AllowAnonymous]。
其次,我将Ajax调用改为:
$(function () {
$("#jobtitle").autocomplete({
source: function (request, response) {
$.ajax({
url: '@Url.Action("JobsAutoFill", "Account")',
data: {
Prefix: request.term
},
success: function (data) {
response($.map(data, function (obj) {
return {
label: obj.Name,
value: obj.Name
};
}));
}
});
},
minLength: 1
});
});
以下是我的ActionResult。我添加了一个可以解决区分大小写的更改:
[AllowAnonymous]
public JsonResult JobsAutoFill(string Prefix)
{
//Note : you can bind same list from database
List<Jobs> ObjList = new List<Jobs>();
ObjList = GetAllJobs();
//Searching records from list using LINQ query
var JobNames = (from N in ObjList
where N.Name.ToLower().StartsWith(Prefix.ToLower())
select new { N.Name });
return Json(JobNames, JsonRequestBehavior.AllowGet);
}
答案 1 :(得分:3)
如果不必具有公共访问权限,则不应将其设为AllowAnonymous。 其次,更改您的查询以获得更好的性能:
var JobNames = (from N in ObjList
where N.Name.ToLower().StartsWith(Prefix.ToLower())
select N.Name);
显然你需要返回一个字符串数组。但是你的代码返回一个具有单个字符串属性的对象数组。
根据更新更改脚本代码:
success: function (data) {
response($.map(data, function (obj) {
return {
label: obj,
value: obj
};
}));
}
答案 2 :(得分:3)
不要更改允许匿名更改您的ajax调用,就像在查询字符串中传递您的参数一样,这将触及您的后端函数。希望这会对你有所帮助
$(function () {
$("#jobtitle").autocomplete({
source: function (request, response) {
$.ajax({
url: '@Url.Action("JobsAutoFill", "Account")?Prefix='+$("#jobtitle").val(),
data: {
Prefix: request.term
},
success: function (data) {
response($.map(data, function (obj) {
return {
label: obj.Name,
value: obj.Name
};
}));
}
});
},
minLength: 1
});
});