Есть ли элегантный способ сравнить флажок и текстовое поле с помощью валидаторов ASP.NET? - PullRequest
4 голосов
/ 18 сентября 2008

У меня есть повторитель Asp.Net, который содержит текстовое поле и флажок. Мне нужно добавить проверку на стороне клиента, которая проверяет, что когда флажок установлен, текстовое поле может принимать только нулевое или пустое значение.

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

Asp: CompareValidator, по-видимому, недостаточно гибок для выполнения такого сложного сравнения, поэтому мне осталось взглянуть на Asp: CustomValidator.

Проблема, с которой я сталкиваюсь, заключается в том, что, похоже, нет никакого способа передать пользовательскую информацию в функцию проверки. Это проблема, потому что ClientIds флажка и текстового поля мне неизвестны во время выполнения (так как они являются частью Repeater).

Итак ... Мои варианты выглядят так:

  1. Передайте текстовое поле и флажок в CustomValidator каким-либо образом (кажется невозможным).
  2. Найти TextBox через JavaScript на основе аргументов, переданных CustomValidator. Возможно ли это, что с неоднозначностью ClientId?
  3. Полностью забудьте о проверке и создайте собственный JavaScript (что позволит мне передать оба ClientIds в пользовательскую функцию).

Любые идеи о том, что может быть лучшим способом реализации этого?

Ответы [ 2 ]

2 голосов
/ 18 сентября 2008

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

0 голосов
/ 18 сентября 2008

Разве вы не можете поместить CustomValidator внутри повторителя? Если нет, вы можете создать его динамически, когда повторитель привязан и пользователь FindControl ()

protected MyDataBound(object sender, RepeaterItemEventArgs e) {
  (CheckBox)cb = (CheckBox)e.Item.FindControl("myCheckboxName");
  (TextBox)tb = (TextBox)e.Item.FindControl("myTextBox");
}

... или что-то в этом роде. Я сделал код с макушки головы.

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