Asp.net mvc 3 JQuery UI自动完成在ASP.NET MVC中不起作用
我正在尝试在ASP.NET MVC 3中实现自动完成,如下所示 但我真的不能让它工作。我看过一系列其他的帖子和博客,但迄今为止没有成功 我有一个DB表,其中包含日语区域,如下所示: 一,ハイチ; 2.ドミニカ共和国; 3.南アフリカ 基本上是[钥匙,名字]对 在我的存储库中,我正在执行以下调用:Asp.net mvc 3 JQuery UI自动完成在ASP.NET MVC中不起作用,asp.net-mvc-3,jquery-ui,Asp.net Mvc 3,Jquery Ui,我正在尝试在ASP.NET MVC 3中实现自动完成,如下所示 但我真的不能让它工作。我看过一系列其他的帖子和博客,但迄今为止没有成功 我有一个DB表,其中包含日语区域,如下所示: 一,ハイチ; 2.ドミニカ共和国; 3.南アフリカ 基本上是[钥匙,名字]对 在我的存储库中,我正在执行以下调用: public IQueryable<Region> GetAllRegions() { return db.Regions; } 获取我传递给控制器的原始数
public IQueryable<Region> GetAllRegions()
{
return db.Regions;
}
获取我传递给控制器的原始数据,根据输入将数据配对,并连接到如下字符串:
public class RegionsController : Controller
{
Region_Repository rr = new Region_Repository();
public string FindRegions(string q)
{
List<string> regions = rr.GetAllRegions().Select(r => r.Name).Where(s => s.StartsWith(q)).ToList();
return string.Join("\n", regions);
}
}
通过服务器/Regions/FindRegions/?q访问控制器时=ハ 返回包含单个条目的页面ハイチ 正如所料
在页面上,我有一个带有id NewRegion和脚本的文本框
<script type="text/javascript">
$(document).ready(function () {
$("#NewRegion").autocomplete('@Url.Action("FindRegions", "Regions")');
})
</script>
我把它放在文本框下面
我从GoogleAPI中引用了JQuery和JQueryUI,因为我在这个页面上成功地执行了其他JQuery并使用了JQueryUI日期选择器
我尝试将脚本放在一个单独的文件中,并将url硬编码为“/Regions/FindRegions”,但没有任何更改。我只在第二天看了firebug,所以还不是很熟练地使用它,而且脚本似乎没有得到执行。
当通过URL访问时,控制器被称为fine,但我在文本框中输入的任何内容都不会传递给控制器
有人能看出这有什么问题吗?根据的黑暗深度,将自动完成字符串传递给服务器时使用的参数称为term,而不是q 更新:同时,使用自动完成{source:@…url…}初始化
更新2:同时,返回Autocomplete小部件所需的数据类型,字符串的JSON数组或对象的JSON数组。我通过以下方式实现了它。我更改了控制器以返回Json数据,如下所示:
public ActionResult FindRegions(string term)
{
var regionNames = rr.GetAllRegions().Select(r => r.Name).Where(s => s.Contains(term)).ToList();
return Json(regionNames, JsonRequestBehavior.AllowGet);
}
注意:AllowGet在那里,因此我可以通过url检查结果,因此仅用于调试。
自动完成脚本变成:
$(function () {
$('#NewRegion').autocomplete({ source: '/Regions/FindRegions' } );
});
现在它起作用了,但我仍然不知道为什么。谢谢你,我刚刚试过,但它没有带来任何变化。。。这太令人沮丧了。是不是远程调用必须使用Json数据?我想我刚刚开始工作了。但我不太清楚为什么我能成功。。。很高兴看到你的答案。谢谢,但我想这还不够。。。不管怎样,现在我正在向它传递json数据,它正在工作。不知道为什么。谢谢你的帮助。因为你正在返回JSON数据。之前,您返回了换行分隔字符串,自动完成小部件在任何情况下都不会处理这些字符串。要么是字符串数组,要么是对象数组。啊,现在一切都有意义了!如果你把它写在你的答案里,我很乐意打勾。酷,我给你打勾,然后:我会发现你在答案上打了记号。你能解决这个问题吗?还记得怎么做吗?