2009-06-24 2 views
20

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

ответ

20

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

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

Edit:

Только что проверил его с помощью отражателя и функции всегда будет возвращать Правда, если страница не имеет валидаторов (ValidatorCollection равно нулю).

+0

Кроме того, я просто ударил сценарий на днях, когда у меня появился YPOD (Желтая страница смерти), потому что я удалил элемент проверки правильности, сделал обратный звонок и получил ошибку, так как код не сделал найти любые валидаторы, которые вызвали их проверку. –

+0

Спасибо, я просто хотел убедиться, что я не теряю рассудок. ЛОЛ. – mkelley33

+0

Только что отредактировал мое сообщение, чтобы добавить немного дополнительной информации. Спасибо за голосование/принятие. :-) – Cerebrus

2

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

6

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

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

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

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

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

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

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 только проверяет ошибки проверки в контрольных валидатора на вашей странице, все это зависит от того, что делают ваши средства управления валидаторов.

Смежные вопросы