C# - 文本框TextChanged事件未触发

4

我目前正在工作中参与一个项目,但是我的文本框的TextChanged事件出现了一些问题。我已经尝试在代码中设置断点,但它并没有触发该事件。

<FooterTemplate>
                <asp:TextBox ID="TextBoxSiteAlias" runat="server" AutoPostBack="true" OnTextChanged="TextBoxSiteAlias_TextChanged"></asp:TextBox>
                <ajaxToolkit:AutoCompleteExtender
                                    runat="server" 
                                    id="AutoCompleteExtenderSiteAlias" 
                                    targetcontrolid="TextBoxSiteAlias"
                                    servicemethod="GetSiteAliasList"
                                    minimumprefixlength="2" 
                                    completioninterval="1000"
                                    enablecaching="true"
                                    completionsetcount="12" />
            </FooterTemplate>

这是我在Gridview中的FooterTemplate。
protected void TextBoxSiteAlias_TextChanged(object sender, EventArgs e)
    {
        string query = @"select distinct (isnull([site_address1], '')
                            +isnull([site_address2], '')
                            +isnull([site_address3], '')
                            +isnull([site_address4], '')
                            +isnull([site_address5], '') ) as 'Site_adresse' ,
                          city,
                          country,
                          [site_id] as 'siteID'
                          FROM [Henkel].[dbo].[tbl_Henkel_site_info_upload]
                          WHERE site_id = '" + ((TextBox)GridView1.FooterRow.FindControl("TextBoxSiteAlias")).Text + "'";
        conn.Open();
        SqlCommand cmd = new SqlCommand(query, conn);
        SqlDataReader myReader = cmd.ExecuteReader();
        DataTable myTable = new DataTable();
        myTable.Load(myReader);
        conn.Close();
        if (myTable.Rows.Count > 0)
        {
            ((TextBox)GridView1.FooterRow.FindControl("TextBoxSiteAddress")).Text = Convert.ToString(myTable.Rows[0]["Site_adresse"]);
            ((TextBox)GridView1.FooterRow.FindControl("TextBoxSiteCity")).Text = Convert.ToString(myTable.Rows[0]["city"]);
            ((TextBox)GridView1.FooterRow.FindControl("TextBoxSiteCountry")).Text = Convert.ToString(myTable.Rows[0]["country"]);
            ((TextBox)GridView1.FooterRow.FindControl("TextBoxIBSSiteID")).Text = Convert.ToString(myTable.Rows[0]["siteID"]);
        }
        else
        {
            ((TextBox)GridView1.FooterRow.FindControl("TextBoxSiteAddress")).Text = "";
            ((TextBox)GridView1.FooterRow.FindControl("TextBoxSiteCity")).Text = "";
            ((TextBox)GridView1.FooterRow.FindControl("TextBoxSiteCountry")).Text = "";
            ((TextBox)GridView1.FooterRow.FindControl("TextBoxIBSSiteID")).Text = "";
        }
    }

这是应该在专用文本框失去焦点时调用的功能。
我在许多论坛上寻找原因,但所有回复都表明文本框需要AutoPostBack属性(我的文本框已经有了)。
小提示:我有相同的项目(另一家公司的所有相同功能),在那个项目中它可以正常工作。我复制了该项目的代码到新项目中,并更改了所有查询+连接字符串。
希望有人能帮助我吗? :)
谢谢
凯文

5
说句实话,你构建 SQL 命令字符串的方式看起来很危险。最好使用 SqlCommand.Parameters 添加参数。 - Botz3000
也许尝试将该方法设为公共的。不确定这是否有影响。 - svinja
@svinja:将该方法设为公共方法并没有起到帮助作用。 - KevinP
@MichalFranc:我一个小时前也试过那个方法,刚刚又重试了一次,但是还是没有帮助! - KevinP
1
@Botz3000:老旧的“容易受到SQL注入攻击”的评论总是备受喜爱 :) - James Johnson
显示剩余3条评论
1个回答

1

请确保将CausesValidation设置为false。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接