gpt4 book ai didi

c# - Typeahead.js 和 Bloodhound.js 与 C# WebForms WebMethod 的集成

转载 作者:行者123 更新时间:2023-11-30 17:19:59 37 4
gpt4 key购买 nike

我正在尝试用 C# 实现一个简单的 WebMethod 来搜索 50,000 人的数据库。我正在使用 Twitter Bootstrap bloodhound.jstypeahead.js 来标记和自动完成响应。

当我运行这段代码时,typeahead 会显示一个带有 undefined 的下拉菜单。

如何正确处理 JSON 响应以去除 .NET WebMethod 返回的 d 对象并将我的记录正确传递给 Bloodhound?我已经尝试使用 jQuery 的 $.ajax 提供的 dataFilter 方法,但它对我不起作用。

C# 网络方法:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static object searchStaffByName(string q)
{
using (App_Data.DQDBDataContext dc = new App_Data.DQDBDataContext())
{
var results = dc.getStaffDetails(q).ToList();
return new { Status = "OK", Records = results, Count = results.Count };
}
}

Typeahead JS 实现:

var textlookup = new Bloodhound({
datumTokenizer: function (d) {
return Bloodhound.tokenizers.whitespace(d.val);
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: 'Search.aspx/searchStaffByName',
replace: function (url, query) {
searchQuery = query;
return url;
},
ajax: {
beforeSend: function (jqXhr, settings) {
settings.data = JSON.stringify({
q: searchQuery
});
jqXhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
},
dataFilter: function (data, type) {
if (type === "json") {
data = $.parseJSON(data);
if (typeof data.d === 'object' && data.d.Count > 0) {
return data.d.Records;
}
}
},
type: 'POST'
}
}
});

textlookup.initialize();

$('.autocomplete').typeahead({
hint: true,
highlight: true,
minLength: 3
},
{
name: 'textlookup',
displayKey: 'Forename',
source: textlookup.ttAdapter()
});

示例 JSON 响应:

{
"d": {
"Status":"OK",
"Records": [{
"id":45711192,
"phone":"514-579-5721",
"Forename":"Jayden",
"Surname":"Adams",
"DOB":"\/Date(990226800000)\/"
},
{
"id":12603644,
"phone":"333-143-9094",
"Forename":"Jake",
"Surname":"Adams",
"DOB":"\/Date(43542000000)\/"
},
{
"id":68196438,
"phone":"440-505-2403",
"Forename":"Josh",
"Surname":"Adams",
"DOB":"\/Date(-51152400000)\/"
}],
"Count":6
}
}

最佳答案

如果您的预输入数据将位于 name: 'textlookup', 数组中,请先使用您的 JSON 响应填充该数组。以下假设数据为 JSON。

textlookup = [];
for (var i = 0; i < data.d.Records.length; i += 1) {
textlookup.push(data.d.Records[i].Forename);
}

这应该将每个 Forename 插入数组 textlookup。您收到未定义的错误,因为您将对象放入数组中。

关于c# - Typeahead.js 和 Bloodhound.js 与 C# WebForms WebMethod 的集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25310055/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com