Нужен лучший способ проверки флажков ASP.NET с помощью плагина проверки jquery? - PullRequest
3 голосов
/ 16 июля 2009

Проблема:

Я хочу проверить некоторые ASP.NET-флажки, используя плагин проверки jquery (находится по адресу: http://bassistance.de/jquery-plugins/jquery-plugin-validation/)

О чем это все:

Невозможно установить атрибут имени для флажков ASP.NET (или это так?). Он будет установлен автоматически после визуализации элемента управления и может быть получен с помощью

<%= emailCheckBox.UniqueID %>

Итак, два флажка:

<asp:CheckBox runat="server" ID="emailAcceptCheckBox" />Email<br />
<asp:CheckBox runat="server" ID="phoneAcceptCheckBox" />Phone<br />

отобразит:

<INPUT id="ctl00_MainContentPlaceHolder_emailAcceptCheckBox" type="checkbox" name="ctl00$MainContentPlaceHolder$emailAcceptCheckBox">
<INPUT id="ctl00_MainContentPlaceHolder_phoneAcceptCheckBox" type="checkbox" name="ctl00$MainContentPlaceHolder$phoneAcceptCheckBox">

Возможно, смешивать ASP.NET с плагином проверки jquery, но я предпочитаю плагин проверки jquery, и он отлично работает с входными данными и другими полями.

Проблема в том, что плагин проверки jquery хочет сгруппировать флажки, используя атрибут name из флажков. Это имя атрибута должно быть одинаковым для всех флажков и группы.

Что я сделал:

Я добавил правило для ВСЕХ флажков, используя jquery:

$("#[id*='AcceptCheckBox']").each(function() { $(this).rules("add", { minchecked: 1 }); });

И добавил собственную проверку правил для флажков:

jQuery.validator.addMethod("minchecked",
 function(value, element, param) {
     var noOfChecked = $("#[id*='AcceptCheckBox']:checked").length;
          return noOfChecked >= param;
     },
 "Error");

(Это правило будет применяться для флажков, идентификаторы которых включают AcceptCheckBox, но в этом примере это нормально).

Когда я звоню:

var result = $("#aspnetForm").validate().form();

Прекрасно возвращается, если моя проверка прошла успешно или не удалась!

НО:

1) Я не чувствую, что это очень чистое и приятное решение. Любой лучший совет?

2) Когда я запускаю validate (). Form (), он проходит через ВСЕ мои флажки и для каждого из них проверяет все остальные флажки. Это действительно не обязательно. Как я могу избежать этого?

1 Ответ

1 голос
/ 16 июля 2009

В целом, ваш код выглядит нормально для меня. Я думаю, что вы правильно обработали ограничение asp: checkbox (вы не можете указать атрибут 'name' для asp: checkbox).

Лично я бы использовал обычный флажок HTML.

<input type="checkbox" runat="server" ID="emailAcceptCheckBox" name="acceptCheckBox" value="emailAccepted" /><label for="emailAcceptCheckBox">Email</label><br />
<input type="checkbox" runat="server" ID="phoneAcceptCheckBox" name="acceptCheckBox" value="phoneAccepted" /><label for="phoneAcceptCheckBox">Email</label><br />

(Я добавил метку метки, чтобы пользователь мог щелкнуть метку (большая цель), чтобы установить / снять флажок.)

Выше упростите ваш код jQuery.

В коде вашей стороны сервера проверьте Request.Form ["acceptCheckBox"], чтобы увидеть, что проверено, а что нет.

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