C# 服务器端自动建议不筛选值
我有一个建议框,当有客户端源代码绑定(这里是availableTags)时,它可以很好地工作 但是,当我将源代码更改为服务器端时,它仍然列出建议值,但不会过滤我在建议框中输入的值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 = [];
$("#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);
});
},