Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.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
C# 服务器端自动建议不筛选值_C#_Jquery_.net_Ajax_Asp.net Mvc - Fatal编程技术网

C# 服务器端自动建议不筛选值

C# 服务器端自动建议不筛选值,c#,jquery,.net,ajax,asp.net-mvc,C#,Jquery,.net,Ajax,Asp.net Mvc,我有一个建议框,当有客户端源代码绑定(这里是availableTags)时,它可以很好地工作 但是,当我将源代码更改为服务器端时,它仍然列出建议值,但不会过滤我在建议框中输入的值 $("#tags").autocomplete({ source: function (request, response) { $.getJSON('/User/GetUsersJSONAsync', function (data) { var users = [];

我有一个建议框,当有客户端源代码绑定(这里是availableTags)时,它可以很好地工作

但是,当我将源代码更改为服务器端时,它仍然列出建议值,但不会过滤我在建议框中输入的值

$("#tags").autocomplete({
    source: function (request, response) {
        $.getJSON('/User/GetUsersJSONAsync', function (data) {
            var users = [];
            for (let key in data) {

                users.push(data[key].userPrincipalName);
            }
            response(users);
        });
    },    
});

PS:上面的fiddle不会给出任何JSON回复,因为它在我的代码中击中了一个MVC控制器,我不能在fiddle中使用它,这只是为了表示的目的

也就是说,当我输入“A”时,它会列出第一种情况下所有带有“A”和“A”的标记,这是客户端源代码。
但是,它不会过滤第二种情况,即服务器端源,而是会列出所有内容。

可能是因为这是异步发生的,您是否尝试在返回JSON响应后设置自动完成?例如:

$(document).ready(function() {
    $.getJSON('/User/GetUsersJSONAsync', function (data) {
        var users = [];
        for (let key in data) {
            users.push(data[key].userPrincipalName);
        }
        $("#tags").autocomplete({
            source: users
        });
    });
});

通过向服务器端添加一个参数修复了此问题,感谢@user1672994的提示

var textInputObj={textValue:$(“#搜索”).val()}


这不是正确的行为吗?当您将代码移动到服务器端时,autocomplete插件将加载服务器发送的数据。因为,你应该发送整个列表,所以它会显示所有内容。这里有一个可能的解决方案——1)将搜索词传递给服务器,以便服务器过滤列表并返回与过滤条件匹配的内容。2) 在客户端获取所有内容,并将数组保存在客户端的内存中。然后将其分配给$(“#tags”)元素,以便自动完成工作。感谢您的建议,我使其工作$.getJSON('/User/GetUsersJSONAsync',function(data){var users=[];for(let key in data)users.push(data[key].userPrincipalName);alert(data[key].userPrincipalName);$(“#tags”).autocomplete({source:users}) });上面的代码我放在onReady中,您给我的代码有语法问题,没有运气,缺少一个
}
。我已经更新了答案以更正语法问题,并将其包装在
$(document).ready()
中,这将是确保在执行之前加载DOM的最佳位置。我检查了编辑的代码,getJson在键入字母时未命中,这是否可以作为ajax调用移动?因此,问题似乎不是异步运行-抱歉,我认为这至少值得一试。
$(document).ready(function() {
    $.getJSON('/User/GetUsersJSONAsync', function (data) {
        var users = [];
        for (let key in data) {
            users.push(data[key].userPrincipalName);
        }
        $("#tags").autocomplete({
            source: users
        });
    });
});
// Sets up the multicolumn autocomplete widget.
$("#search").mcautocomplete({
    // These next two options are what this plugin adds to the autocomplete widget.
    showHeader: false,
    columns: columns,   
    source: function (request, response) {

        var textInputObj = { textValue: $("#search").val() };

        $.getJSON('/User/GetUsersJSONAsync', textInputObj, function (data) {
            var users = [];

            for (let key in data) {
                   users.push(new Array(data[key].surname ? data[key].surname : "Blank", data[key].displayName, data[key].userPrincipalName));                 

            }          
            response(users);
        });
    },