如何从jQuery中触发ASP.NET中的函数?的WebForms

时间:2014-12-01 18:54:14

标签: c# jquery asp.net

我是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>");
        }
    }

现在,只有在单击文本框按钮后,才能生成结果。我想让它在用户输入时自动显示。

我该怎么做?

谢谢!

1 个答案:

答案 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);
                }
            });
        }
    });
});

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

  1. 检查javascript控制台是否有错误。

  2. 在调试器(Firebug或Chrome中的开发人员工具等)中逐步执行javascript,看看$("#tb_SearchQuery").val()是否真正为您提供了任何内容。

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