【问题标题】:text changed event not fired未触发文本更改事件
【发布时间】:2011-01-14 18:42:03
【问题描述】:

我需要在我的网页中添加 1 个文本框事件(使用 C# 在 ASP.NET 中创建),并且我在 Page_Load 函数中声明并进入 asp 语法:

 protected void Page_Load(object sender, EventArgs e)
    {
        textbox1.TextChanged += new EventHandler(textbox1_TextChanged);
    }

public void textbox1_TextChanged(object sender, EventArgs e)
{
    if (textbox1.Text == "ABCD")
    {
        Image1.Visible = true;
        textbox1.Enabled = false;
    }
}

在asp页面中我使用了这个语句:

<asp:TextBox Width="200" ID="textbox1" runat="server"></asp:TextBox>

我做了调试,发现没有执行textbox1_TextChanged函数

为什么?

【问题讨论】:

  • 你应该将标题设置为TextChanged-event not fired

标签: c# asp.net events


【解决方案1】:

您需要将AutoPostBack 设置为true。
请参阅msdn:

让 TextChanged 事件引起 立即发布,设置 TextBox 控件的 AutoPostBack 属性到 真的。

【讨论】:

  • 但请记住:“TextBox Web 服务器控件不会在用户每次输入按键时引发事件,只有在用户离开控件时才会引发事件。”
  • 这是由xhtml-tag的changed事件的定义引起的:)
  • 那么如何在每次击键时触发一个事件?
  • @PeteAlvin 又快又脏:附加到keyup 并使用例如jQuery 触发change。但老实说,我认为这个问题没有用,因为这意味着响应时间必须应对笔画间隔(取决于您的实际打字速度,大约每分钟 300 笔,这意味着每秒 5 笔,这表示响应时间为 200 毫秒)。
  • 在我的情况下,我将自动回发设置为 true,但我不明白为什么当值从数据集中设置为文本框时,文本更改服务器端事件没有触发,请建议我是否可以手动触发文本更改事件,因为该事件包含绑定页面中其他两个下拉菜单的代码。
【解决方案2】:

好吧,迟到总比没有好:你声明了一个方法,严格来说,是事件的处理程序。但是您没有将事件绑定到处理程序,如下所示:

<asp:TextBox Width="200" ID="textbox1" OnTextChanged="textbox1_TextChanged" runat="server"></asp:TextBox>

你错过了什么:OnTextChanged="textbox1_TextChanged"

换句话说,您的方法永远不会被调用,因为您从未告诉控件该方法是事件的处理程序。

【讨论】:

    【解决方案3】:

    我认为还值得注意的是 TextChanged 事件确实不 如果文本值实际上没有改变,即你设置了文本,则触发 但是您将其设置为与之前相同的值。

    【讨论】:

    • @Rob:感谢您的指导。我会查看建议的链接,并在查看帖子时更加注意。再次感谢您的建议。
    猜你喜欢
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多