【问题标题】:How to detect postback caused by enter key in textbox in ASP.NET如何检测 ASP.NET 文本框中输入键引起的回发
【发布时间】:2016-07-24 18:37:27
【问题描述】:

当按下 Enter 时,Web 应用程序中的 TextBox 将引发 TextChanged 事件,但前提是文本已更改

如果按下 Enter 时文本没有改变,仍然会发生回发,但 TextChanged 事件不会。

我想知道是否可以确定在文本框中按下 Enter 并导致回发,即。有没有类似下面的?

protected void Page_Load(object sender, EventArgs e) {
    if (sender.reasonControlName == "MyTextBox" &&
            sender.reasonControlKey == keyEnter) {
        handleEnterKey();
    }
}

ASP.Net 4

注意,这不是关于如何禁用由 Web 应用程序中的 TextBox 中的 ENTER 键引起的回发的问题,例如stackoverflow.com/questions/4209903

还有一个使用面板和 DefaultButton stackoverflow.com/questions/12072281 的解决方法,但这似乎有点混乱。

【问题讨论】:

    标签: asp.net textbox key enter textchanged


    【解决方案1】:

    Enter被按下的TextBox的ID可以存储在隐藏字段中:

    <asp:TextBox ID="txtBox1" runat="server" onkeydown="keyPressed(event, 'txtBox1');" ... />
    <asp:TextBox ID="txtBox2" runat="server" onkeydown="keyPressed(event, 'txtBox2');" ... />
    <asp:HiddenField ID="hiddenEnterPressed" runat="server" />
    
    <script>
        function keyPressed(e, id) {
            if (e.keyCode == 13) {
                document.getElementById('hiddenEnterPressed').value = id;
            }
        }
    </script>
    

    注意:onkeydown 事件可以定义为keyPressed(event, this.id),但(可能)错位的 ID 将保存在隐藏字段中;对原始 ID 进行硬编码可以使事情变得更简单。

    可以在代码隐藏中检索 TextBox 控件:

    Control mainCtrl = Master.FindControl("MainContent");
    TextBox txtBox = mainCtrl.FindControl(hiddenEnterPressed.Value) as TextBox;
    

    隐藏字段应在每次回发时重置:

    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);
        hiddenEnterPressed.Value = "";
    }
    

    【讨论】:

    • @ConnersFan 这种变通方法似乎比将字段放在面板中并使用DefaultButton 触发回发更有效,但将其记录在此处很有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    相关资源
    最近更新 更多