引起的Web应用程序在ASP.NET

问题描述:

一个TextBox进入文本框项如何检测回发会导致按下TextChanged事件时输入,但只有当文本已经改变引起的Web应用程序在ASP.NET

如果文本没有改变输入被按下,回传仍然存在,但TextChanged事件不会。

我想知道是否有可能确定输入在文本框中被按下并导致回发,即。有没有像下面这样的东西?

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

ASP.Net 4

注意,这不是一个有关如何禁用造成在Web应用程序中的一个TextBox ENTER键回传,例如问题*.com/questions/4209903

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

文本框,其中输入压可以被存储在一个隐藏字段的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 = ""; 
} 
+0

@ConnersFan这个解决办法似乎更多的工作不是将在一个面板中使用'DefaultButton'来触发一个回传,但将它记录在这里是非常有用的。 – Matt