【问题标题】:TextChanged doesn't fireTextChanged 不会触发
【发布时间】:2013-06-03 17:52:17
【问题描述】:

当我按下按钮添加更多时,我正在尝试生成文本框,所以这是 onclick 的代码

protected void Add_TextBoxes(object sender, EventArgs e)
        {
            int index =  int.Parse(ViewState["pickindex"].ToString());
            TextBox MyTextBox = new TextBox();
            MyTextBox.ID = "tbautogenerated"+index.ToString();
            MyTextBox.Text = "tbautogenerated" + index.ToString();
            MyTextBox.Width= 250;
            MyTextBox.MaxLength = 128;
            MyTextBox.Attributes.Add("runat", "server");
            MyTextBox.CausesValidation = false;
            MyTextBox.AutoPostBack = true;
            MyTextBox.TextChanged += new EventHandler(MyTextBox_TextChanged);
            picktexts.Controls.Add(MyTextBox);

        }

void MyTextBox_TextChanged(object sender, EventArgs e)
    {
        TextBox MyTextBox = sender as TextBox;
    }

但是当我在文本框中进行更改时,textChanged 不起作用!!!怎么了?

HTML 代码

<asp:UpdatePanel ID="UpdatePanel2" runat="server">
                <ContentTemplate>
                    <div id="picktexts" runat="server">
                    <asp:TextBox ID="txtAdress" runat="server" MaxLength="128" Width="250" />
                    <asp:RequiredFieldValidator ControlToValidate="txtAdress" Display="Dynamic" ID="rfvAddress" Text="* Required" runat="server" />
                    <asp:Button ID="bt_addtxtbox" runat="server" Text="Add more" OnClick="Add_TextBoxes"  CausesValidation="false" />
                    </div>
                    </ContentTemplate>
                    </asp:UpdatePanel>

【问题讨论】:

  • 添加一个断点以确保它执行该部分。
  • 新文本框出现,但不订阅文本更改事件?
  • 什么意思,不工作?您是否希望在您在文本框中键入时触发该事件?因为如果是这样,默认情况下它应该只在帖子之间触发。
  • 查看TextChanged 事件的文档。它只在帖子之间触发。当文本框失去焦点时,您可以通过将 AutoPostBack property 设置为 true 来强制发布。否则,在输入字符后强制发帖。编码愉快。
  • 动态添加控件时视图状态会混乱。我使用 [ViewState["AddedControl"] = "true";](devcenter.infragistics.com/Articles/…)。其次..我不知道是否需要设置 runat 服务器属性,即使设置了 AutoPostBack 但您还没有设置 runat 属性。

标签: c# asp.net textbox textchanged


【解决方案1】:

我认为事件处理程序正在在帖子之间丢失。 ASP.NET 的工作方式是,每次将页面发回自身时,所有对象都会再次实例化,并且它们的状态会从 ViewState 中恢复。通常,在 aspx 中声明的控件会通过其标记中的声明将其自身与事件重新关联,但此处并非如此。

因此,请尝试在页面加载期间再次关联事件处理程序。像这样:

void Page_Load (object sender, EventArgs e)
{
    foreach (Control c in picktexts.Controls)
    {
        ((TextBox)c).TextChanged += new EventHandler(MyTextBox_TextChanged);
    }
}

然后看看它是否有效。

【讨论】:

  • 我认为 HTML textchange 是不同的。但是当焦点改变时,kartal 至少应该看到回发事件。
  • 我在焦点改变时看到了回发事件,但我无法从picktexts中获取文本框,它为空!!!
  • 正如 Renan 所说,ViewState 将在每次回帖时重新创建。您能否参考我在您的问题的评论中分享的链接(评论位于第 10 位)?
  • 您的 picktexts div 很可能没有 ViewState,或者未启用。我在这一点上生疏了。请检查 Yogee 的评论。
  • 我没看懂 ViewState 部分你能举个例子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
  • 2015-07-26
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多