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

AutoComplete Controller Action not being called

本文关键字:控制器 操作 调用      更新时间:2023-09-26

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

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方法本身没有调用,在启动的时候,我只是注册自动完成处理程序。问题是什么?

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

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

data: { term: request.term }

或者,从

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

public string GetNames(string id)

我认为你的麻烦在url "/Data/GetNames",你应该把它改为"/Data。aspx/getname

[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;
}

这也是一个很好的文章调用ASP。Net WebMethod使用jQuery AJAX

这取决于你使用什么插件,我使用的插件http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/。

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