Игнорировать валидаторы .NET, если элемент скрыт (отображать: нет) - PullRequest
6 голосов
/ 07 марта 2012

У нас часто возникают проблемы с валидаторами .NET для элементов, которые скрыты с помощью javascript / css (т. Е. Display: none)

Например (могут быть синтаксические ошибки, но не беспокойтесь об этом)

<asp:CheckBox ID="chkNewsletter" runat="server" Checked="true" />
...
<div id='newsletterOnly'>
  <asp:TextBox ID="txtEmail" runat="server" />
  <asp:RequiredFieldValidator ID="vldEmail" ControlToValidate="txtEmail" ErrorMessage="Required" runat="server" />
</div>

с JavaScript:

$('#chkNewsletter').changed(function() {
  $(this).is(':checked') ? $('#newsletterOnly').show() : $('#newsletterOnly').hide();
});

Не следует проверять txtEmail , если оно скрыто.
Вы не можете отправить форму, если newsletterOnly скрыто, поскольку RequiredFieldValidator по-прежнему действует, даже если он скрыт: (
И вы даже не можете увидеть сообщение об ошибке валидатора, потому что оно скрыто

Есть ли способ обойти это?

Я стараюсь избегать использования PostBacks для улучшения взаимодействия с пользователем.
Хотелось бы изменить JavaScript .NET для проверки элементов управления только тогда, когда они видны.

Ответы [ 2 ]

9 голосов
/ 07 марта 2012

Я написал это как общее решение (может использоваться на всех веб-сайтах .NET).

Вам нужно только добавить OnClientClick к кнопке отправки.

//===================================================================
// Disable .NET validators for hidden elements. Returns whether Page is now valid.
// Usage:
//   <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClientClick="DisableHiddenValidators()" />
//===================================================================
function DisableHiddenValidators() {
  for (var i = 0; i < Page_Validators.length; i++) {
    var visible = $('#' + Page_Validators[i].controltovalidate).is(':visible');
    ValidatorEnable(Page_Validators[i], visible)
  }
  return Page_ClientValidate();
}

Для использованияпросто включите приведенный выше JavaScript и добавьте класс OnClientClick="DisableHiddenValidators()" к кнопке отправки:

<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClientClick="DisableHiddenValidators()" />

РЕДАКТИРОВАТЬ: функция jQuery $(submitButton).click не работает на iPhone / Android.Я немного изменил приведенный выше пример кода.

Если кто-то видит что-то не так или возможное улучшение, прокомментируйте:)

0 голосов
/ 15 августа 2014

Также может быть хорошей идеей использовать группы проверки в такой ситуации.Если вы можете сгруппировать свои валидаторы, то укажите на кнопке, с какой группой валидации вам нужно проверять, будут проверяться только те валидаторы в группе.Подробнее здесь: http://msdn.microsoft.com/en-us/library/vstudio/ms227424(v=vs.100).aspx

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