我正在尝试在我的Web应用程序中使用jQuery UI自动完成功能。我设置的是一个名为SearchPreload.aspx的页面。此页面检查要与另一个参数一起出现的值(术语)。页面验证传入的值,然后从数据库中提取一些数据并在页面上打印出一个javascript数组(例如:["item1","item2"]
)。代码:
protected void Page_Load(object sender, EventArgs e)
{
string curVal;
string type ="";
if (Request.QueryString["term"] != null)
{
curVal = Request.QueryString["term"].ToString();
curVal = curVal.ToLower();
if (Request.QueryString["Type"] != null)
type = Request.QueryString["Type"].ToString();
SwitchType(type,curVal);
}
}
public string PreLoadStrings(List<string> PreLoadValues, string curVal)
{
StringBuilder sb = new StringBuilder();
if (PreLoadValues.Any())
{
sb.Append("[\"");
foreach (string str in PreLoadValues)
{
if (!string.IsNullOrEmpty(str))
{
if (str.ToLower().Contains(curVal))
sb.Append(str).Append("\",\"");
}
}
sb.Append("\"];");
Response.Write(sb.ToString());
return sb.ToString();
}
}
如果我通过浏览器导航到数据库部分工作正常并在页面屏幕上打印出正确的数据。
jQuery ui autocomplete的编写如下:
$(".searchBox").autocomplete({
source: "SearchPreload.aspx?Type=rbChoice",
minLength: 1
});
现在,如果我的理解是正确的,那么每次我在搜索框中输入时,它都应该充当按键并触发我的源来限制数据的正确性?当我通过SearchPreload.aspx代码中的调试语句时,看起来该页面根本没有被点击。
如果我将自动完成功能包装在.keypress函数中,那么我进入搜索预加载页面但仍然没有得到任何结果。我只想在搜索框下显示结果,就像the default functionality example on the jQuery website一样。我做错了什么?
答案 0 :(得分:3)
自动填充将不会显示建议。因此,请复制以下URL(或返回的JSON数据)并将其粘贴到JSONLint。看看你的JSON是否有效。
http://yourwebsite.com/path/to/Searchpreload.aspx?Type=rbChoice&term=Something
PS:我没有看到你正在调用PreLoadStrings
函数。我希望这是正常的。
答案 1 :(得分:0)
要检查的几件事。
确保页面的路径正确无误。如果您位于http://mysite.com/subfolder/PageWithAutoComplete.aspx,并且您的searchpreload.aspx页面位于另一个目录中,例如http://mysite.com/anotherFolder/searchpreload.aspx,您使用的网址作为来源将不正确,则需要
来源:“/ anotherFolder / Searchpreload.aspx?Type = rbChoice”
您可以尝试的另一件事是在searchpreload.aspx页面上创建您正在调用页面方法的方法。通常在使用javascript时,我尝试使用页面方法来处理ajax reqeusts并发回它的数据。有关页面方法的更多信息,请访问:http://www.singingeels.com/Articles/Using_Page_Methods_in_ASPNET_AJAX.aspx
HTH。