2016-04-05 11 views
0

TextBox в веб-приложение будет вызывать TextChanged событие, когда Enter нажата, но только если текст изменился.Как обнаружить постбэк вызванные ввести ключ в текстовом поле в ASP.NET

Если текст не изменился при Enter нажата, постбэк все еще имеет место, но TextChanged событие не делает.

Мне интересно, можно ли определить, что Ввод был нажат в текстовое поле и вызвал обратную передачу, т.е. есть что-то вроде следующего?

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

ASP.Net 4

Заметим, что это не вопрос о том, как отключить постбэк вызванное ENTER ключ в TextBox в веб-приложении, например, stackoverflow.com/questions/4209903

Существует также обходное решение, использующее панель и DefaultButton stackoverflow.com/questions/12072281, но это похоже немного.

ответ

0

Идентификатор TextBox, где Enter прессовали может храниться в скрытом поле:

<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 затем будет сохранены в скрытом поле; жесткое кодирование оригинального идентификатора может упростить работу.

управления 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 That обходного, кажется, больше работы, чем поставив поле в панели и используя 'DefaultButton', чтобы вызвать обратную передачу, но полезно, чтобы все это было документировано. – Matt