Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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
Asp.net mvc 3 JQuery UI自动完成在ASP.NET MVC中不起作用_Asp.net Mvc 3_Jquery Ui - Fatal编程技术网

Asp.net mvc 3 JQuery UI自动完成在ASP.NET MVC中不起作用

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; } 获取我传递给控制器的原始数

我正在尝试在ASP.NET MVC 3中实现自动完成,如下所示 但我真的不能让它工作。我看过一系列其他的帖子和博客,但迄今为止没有成功

我有一个DB表,其中包含日语区域,如下所示:

一,ハイチ; 2.ドミニカ共和国; 3.南アフリカ

基本上是[钥匙,名字]对

在我的存储库中,我正在执行以下调用:

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数据。之前,您返回了换行分隔字符串,自动完成小部件在任何情况下都不会处理这些字符串。要么是字符串数组,要么是对象数组。啊,现在一切都有意义了!如果你把它写在你的答案里,我很乐意打勾。酷,我给你打勾,然后:我会发现你在答案上打了记号。你能解决这个问题吗?还记得怎么做吗?