То, как проверить пользователя, выбрало по крайней мере один флажок в CheckBoxList?

Это было вдохновлено принятым ответом Thinker, но ответ Thinker, кажется, предполагает, что массивы являются наборами. Он распадается, если массивы [ "1", "2" ] и [ "1", "1", "2", "2" ]

Разница между этими массивами составляет [ "1", "2" ]. Следующее решение - O (n * n), поэтому оно не идеальное, но если у вас большие массивы, оно также имеет преимущество в памяти по сравнению с решением Thinker.

Если вы имеете дело с сетами в первую очередь, решение Thinker определенно лучше. Если у вас есть более новая версия Javascript с доступом к фильтрам, вы должны также использовать их. Это только для тех, кто не имеет дело с наборами и использует более старую версию JavaScript (по какой-либо причине) ...

if (!Array.prototype.diff) { 
    Array.prototype.diff = function (array) {
        // if the other array is a falsy value, return a copy of this array
        if ((!array) || (!Array.prototype.isPrototypeOf(array))) { 
            return this.slice(0);
        }

        var diff = [];
        var original = this.slice(0);

        for(var i=0; i < array.length; ++i) {
            var index = original.indexOf(array[i]);
            if (index > -1) { 
                original.splice(index, 1);
            } else { 
                diff.push(array[i]);
            }
        }

        for (var i=0; i < original.length; ++i) {
            diff.push(original[i]);
        }
        return diff;
    }
}   
35
задан Eric Barr 23 August 2017 в 05:57
поделиться

3 ответа

Это легко сделать на стороне сервера проверки, но я предполагаю, что вы хотите сделать это на стороне клиента?

JQuery может сделать это очень легко, если у вас есть что-то, что все элементы управления флажками имеют общее использование в качестве селектора, такого как класс (CssClass в вашем элементе управления .NET). Вы можете создать простую функцию JQuery и подключить ее к настраиваемому валидатору ASP.NET. Помните, что если вы выберете маршрут пользовательского валидатора, чтобы убедиться, что вы проверили его на стороне сервера, а в случае, если javascript не работает, вы не получите бесплатную проверку на стороне сервера, как другие валидаторы .NET.

Для получения дополнительной информации о пользовательские валидаторы проверяют следующие ссылки: www.asp.net и MSDN

Вам не нужно использовать JQuery , это просто упрощает выполнение функции javascript и просмотра всех элементов управления флажками, но вы можете просто использовать обычный javascript, если хотите.

Вот пример, который я нашел по адресу: Ссылка на исходный

<asp:CheckBoxList ID="chkModuleList"runat="server" >
</asp:CheckBoxList>

<asp:CustomValidator runat="server" ID="cvmodulelist"
  ClientValidationFunction="ValidateModuleList"
  ErrorMessage="Please Select Atleast one Module" ></asp:CustomValidator>

// javascript to add to your aspx page
function ValidateModuleList(source, args)
{
  var chkListModules= document.getElementById ('<%= chkModuleList.ClientID %>');
  var chkListinputs = chkListModules.getElementsByTagName("input");
  for (var i=0;i<chkListinputs .length;i++)
  {
    if (chkListinputs [i].checked)
    {
      args.IsValid = true;
      return;
    }
  }
  args.IsValid = false;
}

Боковое примечание: JQuery - это всего лишь небольшой файл js, который вам нужно добавить на свою страницу. Включив его, вы можете использовать все JQuery , которые вам нравятся. Нечего устанавливать, и я думаю, он будет полностью поддерживаться в следующей версии Visual Studio.

60
ответ дан 27 November 2019 в 06:49
поделиться

Прочтите эту статью от 4 парней из Роллы:

http://aspnet.4guysfromrolla.com/articles/092006-1.aspx

Они показывают вам, как создать валидатор для элементов управления CheckBox и CheckBoxList, который работает точно так же, как RequiredFieldValidator для других элементов управления .NET. Он имеет проверку на стороне сервера и проверку на стороне клиента. Самое приятное в этом то, что вы можете указать ValidationGroup, и она будет работать с элементом управления ValidationSummary.

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

3
ответ дан 27 November 2019 в 06:49
поделиться

Прокрутите каждый элемент в ckBoxListReasons. Каждый элемент будет иметь тип «ListItem».

ListItem будет иметь свойство с именем «Selected», которое является логическим. Это правда, когда этот элемент выбран. Примерно так:

Dim bolSelectionMade As Boolean = False
For Each item As ListItem in ckBoxListReasons.Items
 If item.Selected = True Then
  bolSelectionMade = True
 End If
Next

bolSelectionMade будет иметь значение true, если пользователь сделал хотя бы один выбор. Затем вы можете использовать это, чтобы установить состояние Valid для любого конкретного элемента управления валидатором, который вам нравится.

Надеюсь, это поможет!

Ричард.

0
ответ дан 27 November 2019 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: