Как я могу установить ValidationGroup динамически

У меня есть веб-страница ASP.NET 2.0 с двумя пользовательскими элементами управления (.ascx). Каждый UserControl содержит набор валидаторов. Размещение ValidationSummary на странице отобразит все ошибки проверки обоих UserControl. Размещение ValidationSummary в каждом UserControl будет отображать все ошибки обоих элементов управления дважды.

Мне нужен ValidationSummary для каждого UserControl, отображающий только ошибки этого UserControl.

Я попытался решить эту проблему, установив свойство ValidationGroup для валидаторов динамически для каждого элемента управления пользователем. Таким образом, каждая сводка проверок должна отображать только ошибки своего UserControl. Я использовал этот код:

foreach (Control ctrl in this.Controls)
{
    if (ctrl is BaseValidator)
    {
        (ctrl as BaseValidator).ValidationGroup = this.ClientID;
    }
}
ValidationSummary1.ValidationGroup = this.ClientID;

Однако это, похоже, отключает проверку как на стороне клиента, так и на стороне сервера, поскольку при отправке формы проверка не выполняется.

Помощь?


person edosoft    schedule 26.09.2008    source источник


Ответы (2)


Если вы используете ValidationGroups, проверка происходит только в том случае, если элемент управления, вызывающий обратную передачу, назначен той же ValidationGroup.

Если вы хотите использовать один элемент управления для обратной передачи, вы все равно можете это сделать, но вам нужно будет явно вызвать метод Page.Validate.

Page.Validate(MyValidationGroup1);
Page.Validate(MyValidationGroup2);
if(Page.IsValid)
{
    //do stuff
}

Предложение: почему бы вам не раскрыть общедоступное свойство в пользовательских элементах управления под названием ValidationGroup? В установщике вы можете явно установить группу проверки для каждого валидатора. Вы также можете использовать свой цикл, но было бы более эффективно установить каждый валидатор явно. Это может улучшить читаемость кода с помощью пользовательских элементов управления.

person HectorMac    schedule 26.09.2008

Элемент управления, который вызывает отправку вашей формы (например, элемент управления Button), должен быть частью той же группы проверки, что и любые элементы управления ValidationSummary и * Validator.

person Jonathan Carter    schedule 26.09.2008