我是ASP.NET的新手,但我在C#上相当不错。我发现这种方法在PHP中非常容易,但它在ASP.NET中有很多不同。
我的问题是我不知道如何从jQuery查询ASP.NET函数。我有一个ASP.NET WebForms项目,代码隐藏( TestMe.aspx.cs )包含以下代码:
[WebMethod]
internal List<string> GetSearchSuggestions(string SearchQuery)
{
string ConnectionString = "Data Source=<omitted>;Initial Catalog=<omitted>;Integrated Security=True";
string TSQL_Query = "<omitted>";
List<string> SearchSuggestions = new List<string>();
using (SqlConnection connection = new SqlConnection(ConnectionString))
using (SqlCommand command = new SqlCommand(TSQL_Query, connection))
{
connection.Open();
System.Data.SqlClient.SqlDataReader r = command.ExecuteReader();
while (r.Read())
{
SearchSuggestions.Add(r.GetString(0));
}
}
return SearchSuggestions;
}
我在同一个文件中有这个功能( TestMe.aspx.cs ):
protected void tb_SearchQuery_TextChanged(object sender, EventArgs e)
{
string Input = SanitizeInput(this.tb_SearchQuery.Text);
if (!String.IsNullOrEmpty(Input) && Input.Length > 1)
{
Response.Write("<ul>");
foreach (string item in GetSearchSuggestions(Input))
{
Response.Write("<li>" + item + "</li>");
}
Response.Write("</ul>");
}
}
现在,只有在单击文本框按钮后,才能生成结果。我想让它在用户输入时自动显示。
我该怎么做?
谢谢!
答案 0 :(得分:2)
将方法设为public和static(保留WebMethod
属性):
[WebMethod]
public static List<string> GetSearchSuggestions(string SearchQuery)
{
....
}
来自javascript:
$.ajax({
url: "TestMe.aspx/GetSearchSuggestions",
type: "POST",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ SearchQuery: "foo" }),
dataType: "json",
success: function (r) {
console.log(r);
}
});
<强>更新强>
根据您的评论,如果所有文本框都用于此AJAX函数,我建议将其设置为一个简单的HTML控件:
<input type="text" id="tb_SearchQuery" />
以下是您在评论中发布的javascript:
$(document).ready(function () {
$("#tb_SearchQuery").autocomplete({
source: function (request, response) {
$.ajax({
url: "TestMe.aspx/GetSearchSuggestions",
type: "POST",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ SearchQuery: $("#tb_SearchQuery").val() }),
dataType: "json",
success: function (r) {
console.log(r);
}
});
}
});
});
这适用于我的系统。如果您没有收到结果,可以尝试排除故障:
检查javascript控制台是否有错误。
在调试器(Firebug或Chrome中的开发人员工具等)中逐步执行javascript,看看$("#tb_SearchQuery").val()
是否真正为您提供了任何内容。
在GetSearchSuggestions()
的TestMe.aspx.cs中放置一个断点,看看是否a)它被调用了,b)SearchQuery
按预期填充。