Должен ли я всегда вызывать Page.IsValid? - PullRequest
20 голосов
/ 24 июня 2009

Я знаю, что никогда не следует доверять пользовательскому вводу, поскольку нежелательный ввод может каким-то образом поставить под угрозу целостность приложения, будь то случайное или преднамеренное; однако, есть ли причина для вызова Page.IsValid, даже если на странице нет элементов проверки (опять же, я знаю, что это плохая практика - доверять пользовательскому вводу, пропуская проверку)? Производит ли Page.IsValid какие-либо другие виды валидации? Я посмотрел на MSDN, и документы, похоже, предполагают, что Page.IsValid эффективен только в том случае, если на странице есть элементы проверки или был вызван метод Page.Validate. Мой друг посоветовал мне всегда проверять Page.IsValid в обработчиках нажатий кнопок каждый раз, даже если нет элементов управления проверкой или явных вызовов Page.Validate.

Ответы [ 3 ]

20 голосов
/ 24 июня 2009

Я буду первым, кто скажет вам, что " Все данные злые, пока не доказано обратное. " Однако в этом случае я думаю, что ваш друг ошибается, потому что по его логике мы могли бы прийти с сотней других свойств, которые должны быть проверены или установлены, даже если по умолчанию все в порядке.

Проверка Page.IsValid имеет смысл только в том случае, если у вас есть сценарий «CausesValidation» - для кнопки, отправившей форму, свойство CausesValidation имеет значение True. Это автоматически вызовет Page.Validate, и все элементы управления Validation, принадлежащие одному и тому же ValidationGroup, будут проверены на достоверность.

Edit:

Только что проверил это с помощью Reflector, и функция всегда вернет True, если на странице нет никаких валидаторов (ValidatorCollection равен нулю).

6 голосов
/ 30 июня 2009

Вы можете проверить действительность страницы, проверив свойство Page.IsValid, ваша цель проверить Page.IsValid может отличаться как

  • Если у вас есть Validators, у которых для свойства EnableClientScript установлено значение false
  • Если у вас есть проверенный валидатор на стороне сервера .
  • Перед выполнением критической операции в теле обработчика событий PostBack, например Сохранить , Удалить , Аутентифицировать ...
  • Делать / отображать разные вещи в зависимости от действительности страницы ...
  • Любая вещь, о которой вы можете подумать ...

Так, когда / где вы можете позвонить Page.IsValid

  1. Если страница находится в отправить обратно
  2. Если постбэк вызван элементом управления вводом со свойством CausesValidation , установленным в true .
  3. После вызова Page.Validate , т.е. после события Page.Load .

Вы можете проверить Page.IsValid в жизненном цикле страницы, если вызванное место / время удовлетворяет вышеуказанным критериям; в противном случае Page.IsValid приведет к созданию System.Web.HttpException .

Вы должны использовать Page.IsValid там, где это имеет смысл ; как в обработчиках событий обратной передачи элементов управления вводом (с CausesValidation = true) и требуют, чтобы состояние страницы было действительным для правильного выполнения их задачи. (если у вас есть проверенные валидаторы или валидаторы на стороне сервера с отключенной валидацией на стороне клиента, это становится MUST ).

   protected void btnSave_Click(object sender, EventArgs e)
    {
       //Note that there might be ServerSideValidation which evaluated to false.
       if (!Page.IsValid)  
         return;

       CurrentEntity.Save();
    }

Наконец, обратите внимание, что Page.IsValid проверяет только ошибки валидации в элементах управления на вашей странице, все зависит от того, что делают ваши элементы управления.

2 голосов
/ 24 июня 2009

Возможно, вы все равно захотите позвонить, потому что в будущем их, возможно, контролирует валидация. Я знаю, что это своего рода добавление функциональности, основанной на будущих требованиях, но это также защищает себя от необходимости знать, является ли страница действительной, и не проходит через все обработчики событий и т. Д., Чтобы убедиться, что она есть, если валидатор действительно добавлено. У нас есть правило, которое мы всегда добавляем, поэтому в будущем у нас не будет проблемы не проверять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...