如何从 jQuery 触发 ASP.NET 中的函数?网络表单
本文关键字:函数 网络 表单 NET jQuery 触发 ASP | 更新日期: 2023-09-27 18:32:52
我有点新手 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>");
}
}
现在,这确实会产生结果,但仅在单击文本框按钮后。我想让它在用户键入时自动显示。
我该怎么做?
谢谢!
使方法公开和静态(将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()
是否真的能给你带来什么。在 TestMe
GetSearchSuggestions()
.aspx.cs 中放置一个断点,以查看 a) 它是否被调用,以及 b)SearchQuery
按预期填充。