如何从 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>");
        }
    }

现在,这确实会产生结果,但仅在单击文本框按钮后。我想让它在用户键入时自动显示。

我该怎么做?

谢谢!

如何从 jQuery 触发 ASP.NET 中的函数?网络表单

使方法公开和静态(将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);
                }
            });
        }
    });
});

这适用于我的系统。 如果没有结果,可以尝试进行故障排除:

  1. 检查 JavaScript 控制台是否存在错误。

  2. 在调试器(Firebug或Chrome中的开发人员工具等)中逐步浏览javascript,看看$("#tb_SearchQuery").val()是否真的能给你带来什么。

  3. 在 TestMe GetSearchSuggestions().aspx.cs 中放置一个断点,以查看 a) 它是否被调用,以及 b) SearchQuery按预期填充。