2016-04-05 105 views
0

一個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鍵回傳,例如問題stackoverflow.com/questions/4209903

還有一個解決方法,使用面板和DefaultButton stackoverflow.com/questions/12072281,但這似乎有點混亂。

回答

0

文本框,其中輸入壓可以被存儲在一個隱藏字段的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

相關問題