Сохранение фокуса на задних почтовых отправлениях - очевидно трудная задача.Поиск в Google, вы найдете кучу людей, которые хотят того же, но все подключить его по-разному, и в основном, на заказ.Я хотел бы избежать пользовательской реализации, особенно если есть способ, который поддерживается .NET.Только после некоторого очень глубокого поиска я наткнулся на PostBackOptions.TrackFocus, тихо упомянутый в другом сообщении о переполнении стека.Согласно MSDN:
Получает или задает значение, указывающее, должно ли событие обратной передачи вернуть страницу в текущую позицию прокрутки и вернуть фокус текущему элементу управления. "
Черт возьми, это поддерживается .NET 4 - УДИВИТЕЛЬНО. Но у нас есть тонна пользовательских элементов управления, как .NET знает, как установить фокус на элемент управления? Я понятия не имею. Поиск документации MSDN для System.Web.UI.Control, есть интересный метод:
public virtual void Focus()
"Используйте метод Focus, чтобы установить начальный фокус веб-страницы для элемента управления.Страница будет открыта в браузере с выбранным элементом управления. "
Хорошо, ясно, что его можно переопределить. Но каков рекомендуемый способ сделать это? Он возвращает void. Нет примеров. Невозможно найти примерыиз людей, переопределяющих этот метод в своих реализациях. Однако после переопределения его и не делая ничего, кроме создания исключения, становится очевидным, что это не то, как ASP.NET фокусируется на элементе управления, который имел фокус перед постом возврата: он никогда не получаетnamed.
После тонны отладки с использованием Firebug я обнаружил, что включение PostBackOptions.TrackFocus работает! Иногда. Очевидно, что фокус элемента управления поддерживается только тогда, когда элемент управления вызывает метод JavaScript __doPostBack.элементы управления, которые запускают PostBack (при нажатии enter внутри элемента управления), вызывают WebForm_OnSubmit (), который не обновляет скрытое поле ASP __LASTFOCUS. __doPostBack вызывает WebForm_OnSubmit () после установки скрытых полей.
Это гдеЯ cuпостоянно застрял.Похоже, мне нужно получить все, чтобы вызвать __doPostBack, несмотря ни на что.Там очень, очень мало документации по использованию TrackFocus.Так у кого-нибудь есть какие-нибудь советы отсюда?