【问题标题】:C# - TextBox TextChanged event not firingC# - TextBox TextChanged 事件未触发
【发布时间】:2012-04-23 07:36:00
【问题描述】:

我目前正在处理一个项目,由于某种原因,我的文本框的 textchanged 事件没有触发。我试图在我的代码中放置一个断点,但他没有到达那里,所以他的事件没有触发 imo。

<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 属性(我的有)。

小通知:我有相同的项目(我们公司的另一笔交易具有所有相同的功能,并且在该项目中运行良好。我已将该项目代码复制到新项目并更改了所有查询 + 连接字符串)

希望有人可以帮助我吗? :)

非常感谢

凯文

【问题讨论】:

  • 只是说,构建 SQL 命令字符串的方式看起来很危险。最好使用SqlCommand.Parameters添加参数。
  • 也许尝试公开该方法。不确定这是否重要。
  • 检查您的应用/页面是否开启了 ViewState
  • @svinja:公开该方法并没有帮助。
  • @Botz3000:古老的“容易发生 SQL 注入”的评论总是很受欢迎 :)

标签: c# asp.net ajax


【解决方案1】:

确保 CausesValidation 设置为 false。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多