CustomValidator на стороне сервера происходит слишком поздно в .Net Wizard - PullRequest
1 голос
/ 04 августа 2009

У меня проблема с мастером сбора данных.

Мой мастер имеет несколько валидаторов на стороне клиента (регулярное выражение, обязательные поля и т. Д.), И все они работают нормально.

Я только что добавил CustomValidator к одному из элементов управления, который вызывает некоторый код на стороне сервера. (к сожалению, это должно быть на стороне сервера).

Моя проблема в том, что этот код вызывается после того, как мастер перешел к следующему шагу (или находится в процессе перемещения).

Таким образом, тот факт, что он возвращает ложь для проверки, для меня малопригоден ...

Я добавляю Validator динамически как часть моего метода InitControl следующим образом:

mustUploadAnImageValidator = new CustomValidator();
mustUploadAnImageValidator.ControlToValidate = radioButtonList.ID;
mustUploadAnImageValidator.ValidationGroup = "wizardGroup";
mustUploadAnImageValidator.ErrorMessage = "You must select a valid gallery image to use";
mustUploadAnImageValidator.Display = ValidatorDisplay.Static;
mustUploadAnImageValidator.ServerValidate += 
    new ServerValidateEventHandler(mustUploadAnImageValidator_ServerValidate);
mustUploadAnImageValidator.CssClass = "galleryValidationMessageTop";

Это работает для всех других валидаторов, но я не могу понять, почему мастер продолжает работу до того, как вернется проверка моего сервера.

Я добавил всплывающее окно javaScript, вызываемое из метода на стороне сервера, которое в основном говорит: «Я не действителен», и это появляется сразу после перехода на экран.

Любые предложения с благодарностью приняты.

Ответы [ 2 ]

2 голосов
/ 06 августа 2009

Мне удалось разобраться с этим.

Я добавил обработчик событий для NextButtonClick & PreviousButtonClick, который просто снова вызывает проверку страницы.

protected virtual void DataCollectionWizard_PreviousButtonClick(object sender, WizardNavigationEventArgs e)
    {
        //manually validate the page, as the automatic validation seems to ignore CustomValidators
        Page.Validate("wizardGroup");

        if (!Page.IsValid)
        {
            e.Cancel = true;
        }
    }

Мой валидатор на стороне сервера теперь вызывается дважды, один раз с помощью исходного кода мастера, который затем игнорируется, и второй раз с помощью этого метода, который затем останавливает переход мастера на следующий шаг ....

Это не лучшее исправление в мире, но, по крайней мере, оно работает! Я обновлю этот пост, если когда-нибудь выясню, что на самом деле происходит.

0 голосов
/ 04 августа 2009

Убедитесь, что вы добавляете элемент управления при каждой обратной передаче в событии Init.

Редактировать

Вы также должны вручную подключить проверку на стороне клиента для пользовательских валидаторов.

...