Вот что происходит:
1) TAB на поле - клиентское событие
2) Сосредоточиться на следующем поле - клиентское событие
3) Postback - серверное событие
4) Перерисовка страницы - событие клиента, новая страница переопределяет события прежнего клиента
Решение вашей проблемы:
а) получить элемент, который получил фокус ДО обратной передачи
<script>
var idSelected;
$("input").focusin(function () {
idSelected = this.id;
});
</script>
b) сохранить идентификатор клиента (фактически в var idSelected
) где-то (т.е. скрытое текстовое поле, vith ViewState = true) ДО обратной передачи
** б) получить ClientID ** (извлечь из скрытого TextBox и поместить его в var idSelected
) ПОСЛЕ постбэка
d) получить элемент с ClientID и установить фокус ПОСЛЕ постбэка
<script>
$(document).ready(function () {
if (idSelected != null) {
$("#" + idSelected).focus();
idSelected = null;
});
});
</script>
Примечание: в этом примере сценариев используется JQuery .
Не забудьте поставить Jquery.js
в вашем решении и ссылку на вашей странице
<form id="form1" runat="server" enctype="multipart/form-data" method="post">
<asp:ScriptManager runat="server" >
<Scripts>
<asp:ScriptReference Path="~/Scripts/jquery.js" ScriptMode="Auto" />
....
Примечание 2: это решение работает без AJAX .
Посмотрите на этот ответ : чтобы Javascript работал над Ajax, вы должны использовать такой код:
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
function EndRequestHandler(sender, args)
{
MyScript();
}
</script>