Как обнаружить обратную передачу, вызванную вводом ключа в текстовое поле в ASP.NET

TextBox в веб-приложении вызовет TextChanged событие при нажатии Enter, но только если текст изменился.

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

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

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

ASP.Net 4

Обратите внимание, что это не вопрос о том, как отключить обратную передачу, вызванную клавишей ENTER в TextBox в веб-приложении, например stackru.com/questions/4209903

Существует также обходной путь, использующий панель и DefaultButton /questions/5418085/sobyitie-textbox-keydown-v-aspnet, но это кажется чем-то вроде кучи.

1 ответ

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

Элемент управления 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 = "";
}
Другие вопросы по тегам