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

C# 如何从jQuery触发ASP.NET中的函数?网络表单,c#,jquery,asp.net,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

我对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;
    }
[WebMethod]
内部列表GetSearchSuggestions(字符串搜索查询)
{
string ConnectionString=“数据源=;初始目录=;集成安全性=True”;
字符串TSQL_Query=“”;
列表搜索建议=新列表();
使用(SqlConnection连接=新的SqlConnection(ConnectionString))
使用(SqlCommand=newsqlcommand(TSQL_查询,连接))
{
connection.Open();
System.Data.SqlClient.SqlDataReader r=command.ExecuteReader();
while(r.Read())
{
SearchSuggestions.Add(r.GetString(0));
}
}
返回搜索建议;
}
我在同一个文件中有这个函数(TestMe.aspx.cs):

protectedvoid tb\u SearchQuery\u TextChanged(对象发送方,事件参数e)
{
字符串输入=SanitizeInput(this.tb_SearchQuery.Text);
如果(!String.IsNullOrEmpty(输入)&&Input.Length>1)
{
响应。写入(“
    ”); foreach(GetSearchSuggestions(输入)中的字符串项) { 回答。写(“
  • ”+项目+“
  • ”); } 响应。写入(“
”); } }
现在,这确实会产生结果,但只有在单击文本框按钮之后。我想让它自动显示为用户类型

我该怎么做


谢谢

使方法公开且静态(保留
WebMethod
属性):

更新:

根据您的评论,如果文本框用于此AJAX函数,我建议将其设置为一个简单的HTML控件:

<input type="text" id="tb_SearchQuery" />
这对我的系统有效。如果没有得到结果,可以尝试进行故障排除:

  • 检查javascript控制台是否存在错误

  • 在调试器(Firebug或Chrome中的开发人员工具等)中逐步使用javascript,查看
    $(“#tb_SearchQuery”).val()
    是否实际获得了任何信息

  • 在TestMe.aspx.cs中的
    GetSearchSuggestions()
    中放置一个断点,查看a)是否正在调用它,b)
    SearchQuery
    是否按预期填充


  • 你能在.aspx页面中显示你的标记吗。。为什么不能从他们的..中调用方法
    OnClick
    。。?下面是一个关于如何在.cs文件中调用具有[WebMethod]属性的方法的示例。例如,有很多方法可以做到这一点。是的,给你:嗨,我正在尝试你建议的更改,但这根本不起作用。我已经将SearchQuery:“foo”更新为SearchQuery:$(“#tb_SearchQuery”).val(),这也不起作用。这是我的全部代码:-我在那里做错了什么吗?谢谢@heh pastebin在工作时被阻止在这里,但无论如何,你应该在这里发布任何相关代码,这样其他人将来可能会受益。请描述“不工作”-错误?没有结果?请注意,ASP可能会损坏web控件的ID,因此请确保
    $(“#tb_SearchQuery”)
    是正确的。您好,代码太长,我无法在此发布。它不像中那样工作,根本没有结果。没有错误,只是没有结果。ASP.NET如何损坏ID?我把它改成了tb_SearchQuery。例如:$(document).ready(function(){$(“#tb_SearchQuery”).autocomplete({source:function(request,response){$.ajax({url:“TestMe.aspx/GetSearchSuggestions”,type:“POST”,contentType:“application/json;charset=utf-8”,数据:json.stringify({SearchQuery:$(“#tb#SearchQuery”).val()),数据类型:“json”,成功:function(r){console.log(r);}}}}};};我很高兴这让您朝着正确的方向前进;)
    [WebMethod]
    public static List<string> GetSearchSuggestions(string SearchQuery)
    {
       ....
    }
    
    $.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);
        }
    });
    
    <input type="text" id="tb_SearchQuery" />
    
    $(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);
                    }
                });
            }
        });
    });