自动完成控制器未调用操作

时间:2014-03-10 08:09:19

标签: javascript jquery asp.net asp.net-mvc autocomplete

我有一个链接到自动完成处理程序的编辑框,当我输入控制器方法本身没有调用的任何字符时,它甚至不能正常工作。

的jQuery

$("#NameInput").autocomplete({
    minChars: 3,
    delay: 100,
    cacheLength: 25,
    autoFill: true,
    source: function (request, response) {
        $.ajax({
            url: "/Data/GetNames", dataType: "json",
            data: { id: request.term },
            success: function (data) {
                response($.map(data, function (item) {
                    return { label: item.label, value: item.id }; //updated code
                }));
            }
        });
    },
    select: function (event, ui) {
        return false;
    }
});

这是控制器方法。

C#

[RequiresRole(Roles = "su, da, rv, sp, dg, ap, ua")]
[AcceptVerbs(HttpVerbs.Get)]
public string GetNames(string term )
{
    //perform DB operations
    return String.Empty;
}

ASPX

<input type="text" name="NameInput" id="NameInput" class="NameInputField" maxlength="80" tabindex="3" />

这里getNames方法本身没有调用,在启动时我只是注册了自动完成处理程序。问题是什么?

3 个答案:

答案 0 :(得分:0)

据我所知,问题在于你的ajax调用。在您传递的数据中,您将request.term分配给id - 但您的控制器方法正在查找名为term的参数。

更改你的ajax
data: { id: request.term }

data: { term: request.term }

或者,从

更改控制器方法
public string GetNames(string term)

public string GetNames(string id)

答案 1 :(得分:0)

我认为您在网址“/ Data / GetNames”中遇到麻烦,您应该将其更改为“ /Data.aspx/GetNames ”和

[RequiresRole(Roles = "su, da, rv, sp, dg, ap, ua")]
[AcceptVerbs(HttpVerbs.Get)]
[System.Web.Services.WebMethod]
public string GetNames(string term )
{
  //perform DB operations
  return String.Empty;
}

这篇文章也很好Calling ASP.Net WebMethod using jQuery AJAX

答案 2 :(得分:0)

这取决于您使用的插件,我使用的是插件http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/

所以,我找到了解决方案,这里是演示示例http://jquery.bassistance.de/autocomplete/demo/