Порядок выполнения контроля валидации определяется порядком элементов управления в ValidatorCollection
, возвращаемом Page.Validators
. Этот порядок, в свою очередь, определяется порядком элементов управления валидацией в разметке, за некоторыми исключениями (например, валидаторы в элементах управления с привязкой к данным будут добавлены в коллекцию позже, и поэтому будут в конце).
Если вы установите CausesValidation=false
для своей кнопки и затем запустите проверку вручную с помощью Page.Validate
, вы можете использовать методы Add
и Remove
в ValidatorCollection
, чтобы изменить порядок выполнения :
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack) {
// move myValidator to the very end, so it executes last
Validators.Remove(myValidator);
Validators.Add(myValidator);
}
}
Затем, позже, в триггерном управлении:
protected void myButton_Click(object sender, EventArgs e)
{
Page.Validate();
if (!Page.IsValid) { return; }
// validation passed, proceed...
}
Отказ от ответственности: все это эмпирически, я не нашел документов MSDN, чтобы подтвердить это, но, похоже, это работает.