【发布时间】:2013-09-13 16:18:50
【问题描述】:
我正在调用一个函数来获取自动完成的来源。我的 jquery 函数调用控制器,控制器调用方法,方法调用 wcf 服务。我的 wcf 服务返回地址列表。 我想知道是否有办法在第一次调用中存储地址列表(当用户仍然在视图上时),以防止每次用户使用自动完成文本框时调用服务。我尝试使用静态列表来执行此操作,但是数据库上的地址列表可以更改并且需要重新加载(至少在用户转到视图时的第一次调用中)。 这是我的代码。
自动完成:
$(function () {
var availableTags = {
source: '/Address/GetAddresses/',
minLength: 4,
}
$("input.Places").live("keydown.autocomplete", function () {
$(this).autocomplete(availableTags);
});
});
控制器:
public ActionResult GetAddresses(string term)
{
var filteredItems = City.GetFilteredAddresses(term);
return Json(filteredItems, JsonRequestBehavior.AllowGet);
}
方法:
public static IEnumerable<string> GetFilteredAddresses(string term)
{
var items = AddressesService(); This method call a wcf service and return the list of addresses
var filteredItems = items.Where(
item => item.IndexOf(term, StringComparison.InvariantCultureIgnoreCase) >= 0
);
return filteredItems;
}
【问题讨论】:
-
为什么不在 document.ready 上调用该方法并将该列表存储在全局变量中,例如 list,然后存储在自动完成的源中,例如 source:list?
-
您是否尝试减少服务器处理或带宽? (或两者兼而有之?)
-
@Sarcastic 我试过了,但由于某种原因,文本框没有显示选项
-
@HiTechMagic 两者都有,因为地址列表可能很长span>
-
你能展示一下代码吗?
标签: c# jquery asp.net-mvc wcf autocomplete