Используете ли вы Сводка проверки на своей странице?
Если это так, ASP.NET отображает некоторый javascript для автоматической прокрутки до верхней части страницы , что может отменить автоматическое поведение проверки на стороне клиента для фокусировки на последнем недействительном элементе управления.
Кроме того, вы выключили проверку на стороне клиента?
Если вы посмотрите на javascript, сгенерированный проверкой на стороне клиента, вы должны увидеть такие методы:
function ValidatorValidate(val, validationGroup, event) {
val.isvalid = true;
if ((typeof(val.enabled) == "undefined" || val.enabled != false) &&
IsValidationGroupMatch(val, validationGroup)) {
if (typeof(val.evaluationfunction) == "function") {
val.isvalid = val.evaluationfunction(val);
if (!val.isvalid && Page_InvalidControlToBeFocused == null &&
typeof(val.focusOnError) == "string" && val.focusOnError == "t") {
ValidatorSetFocus(val, event);
}
}
}
ValidatorUpdateDisplay(val);
}
Обратите внимание на вызов ValidatorSetFocus, который является довольно длинным методом, который пытается установить фокус на рассматриваемом элементе управления или, если у вас есть несколько ошибок, на последний проверенный элемент управления, используя (в конце концов) следующие строки:
if (typeof(ctrl.focus) != "undefined" && ctrl.focus != null) {
ctrl.focus();
Page_InvalidControlToBeFocused = ctrl;
}
Чтобы заставить это поведение работать, в идеале вам нужно убедиться, что все ваши валидаторы установлены на стороне клиента - для валидаторов на стороне сервера, очевидно, потребуется обратная передача, и это может повлиять на вещи (то есть потерять фокус / позицию) - и установка для MaintainScrollPositionOnPostBack значения true, вероятно, приведет к перезагрузке страницы с кнопкой отправки, а не с недопустимым элементом формы.
Использование серверной стороны. Метод Focus приведет к тому, что ASP.NET отобразит некоторый javascript «при загрузке страницы» (т. Е. В нижней части страницы), но это может быть отменено одним из других механизмов, описанных выше.