Я знаю, что никогда не доверяю пользовательскому вводу, поскольку нежелательный вход может каким-либо образом нарушить целостность приложения, будь то случайным или преднамеренным; однако, существует ли случай для вызова Page.IsValid, даже если на странице нет элементов управления проверкой (опять же, я знаю, что его плохая практика - доверять пользовательским вводам, не допуская проверки)? Выполняет ли Page.IsValid любые другие виды проверки? Я посмотрел на MSDN, и документы, похоже, предполагают, что Page.IsValid эффективен только в том случае, если на странице есть элементы управления проверкой или вызван метод Page.Validate. Один мой друг предположил, что я всегда проверяю Page.IsValid в обработчиках щелчков кнопок каждый раз, даже если нет элементов проверки или явных вызовов Page.Validate.Должен ли я всегда звонить Page.IsValid?
ответ
Я бы из первых сказал вам, что «Все входные данные злые, пока не будет доказано обратное.« Однако в этом случае, я думаю, ваш друг ошибается, потому что по его логике мы могли бы, вероятно, сотни других свойств, которые необходимо проверить или установить, даже если значения по умолчанию в порядке.
Проверка Page.IsValid
имеет смысл, если у вас есть сценарий «CausesValidation» - кнопка, которая отправила форму, имеет свойство CausesValidation
, установленное в True. Это автоматически вызовет Page.Validate
, и все проверки, относящиеся к тому же ValidationGroup
, будут проверены на достоверность.
Edit:
Только что проверил его с помощью отражателя и функции всегда будет возвращать Правда, если страница не имеет валидаторов (ValidatorCollection равно нулю).
Вы все еще можете назвать это, потому что в будущем, возможно, они проведут проверку. Я знаю, что этот вид сводится к добавлению функциональности, основанной на будущих требованиях, но он также защищает вас от необходимости знать, является ли страница действительной и не проходит через все обработчики событий и т. Д., Чтобы убедиться, что она есть, если валидатор действительно получает добавлено. У нас есть правило, которое мы всегда добавляем, поэтому у нас нет такой проблемы, которая не подтверждается в будущем.
Вы можете проверить подлинность страницы, проверяя Page.IsValid свойства, ваша цель, чтобы проверить Page.IsValid может меняться как
- Если у вас есть валидаторы, который имеет EnableClientScript набор свойств для false
- Если у вас есть валидатор на стороне сервера , подтвержденный валидатором.
- Перед выполнения критической операции в теле PostBack обработчика события, как Сохранить, Удалить, Authenticate ...
- Do/отображать различные вещи в зависимости от срока действия страницы ...
- Любого вещь, которую вы можете придумать ...
Так, когда/где вы можете позвонить.IsValid
- Если страница находится в пост обратно
- Если пост обратно вызывается элемент управления вводом с CausesValidation собственности установлен в истинной.
- После звонка на адрес 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 только проверяет ошибки проверки в контрольных валидатора на вашей странице, все это зависит от того, что делают ваши средства управления валидаторов.
- 1. page.Isvalid всегда возвращает false?
- 2. Должен ли я звонить lckpwdf() до getpent()?
- 3. Должен ли всегда звонить EndInvoke делегата внутри AsyncCallback?
- 4. Должен ли я всегда удалятьEventListener?
- 5. Должен ли я всегда вызывать [super viewDidLoad] в методе -viewDidLoad?
- 6. Должен ли я звонить GL_BLEND на создание один раз
- 7. Должен ли я звонить setMinimumBackgroundFetchInterval каждый раз, когда приложение перезагружается?
- 8. iOS - Должен ли я звонить «слабый» в этом блоке?
- 9. Должен ли я не звонить gen_server: stop() напрямую?
- 10. Page.IsValid всегда ложна на стороне сервера проверки
- 11. При использовании CoTaskMemAlloc, должен ли я всегда вызывать CoTaskMemFree?
- 12. Должен ли я всегда использовать GL_CULL_FACE?
- 13. Должен ли я всегда заполнять объект TaskCompletionSource?
- 14. Должен ли я всегда открывать сеанс?
- 15. Должен ли я всегда использовать .off ('load') ;?
- 16. Должен ли я всегда использовать дженерики?
- 17. Должен ли я всегда закрывать stdout явно?
- 18. Должен ли я всегда использовать HTML-Doctypes?
- 19. Должен ли я всегда использовать connection.close
- 20. Должен ли я всегда проверять ошибку MySQL?
- 21. Должен ли я всегда разрабатывать внешние ключи?
- 22. Есть ли способ проверить, могу ли я безопасно использовать Page.IsValid?
- 23. метод onCreate() не должен звонить
- 24. Когда использовать Page.IsValid?
- 25. Page.IsValid property
- 26. Должен ли я всегда проверять, является ли объект NULL?
- 27. Правильно ли реализованы IEquatable? Должен ли я всегда переопределять GetHashCode?
- 28. Страница с несколькими группами проверки всегда возвращает TRUE для Page.IsValid
- 29. Должен ли процесс всегда прекращаться?
- 30. Должен ли Office.initialize всегда задаваться?
Кроме того, я просто ударил сценарий на днях, когда у меня появился YPOD (Желтая страница смерти), потому что я удалил элемент проверки правильности, сделал обратный звонок и получил ошибку, так как код не сделал найти любые валидаторы, которые вызвали их проверку. –
Спасибо, я просто хотел убедиться, что я не теряю рассудок. ЛОЛ. – mkelley33
Только что отредактировал мое сообщение, чтобы добавить немного дополнительной информации. Спасибо за голосование/принятие. :-) – Cerebrus