ASP.NET Как проверить, выбрано ли поле в списке флажков (1 и только 1)

#c# #asp.net #validation

#c# #asp.net #проверка

Вопрос:

Я пытаюсь получить небольшую помощь с функцией проверки для моего назначения. Я полностью застрял на этом. Нам пришлось создать веб-форму с несколькими полями. Я настроил все остальное (имя пользователя длиной более 6 символов; пароль, скрытый звездочками, длиной более 8 символов и содержащий 1 заглавную и 1 строчную букву, 1 цифру и 1 специальный символ и т.д.).

Инструкции заключаются в том, что в каждое поле должно быть что-то введено. Мы должны были создавать различные поля, но одна из инструкций заключалась в создании списка флажков с 5 полями. Однако в инструкциях не указано, что должен быть выбран только один ответ, это то, к чему я стремлюсь.

Список флажков предназначен для возрастной демографии …. для пользователя, чтобы выбрать, в какой возрастной диапазон они попадают. Это то, что у меня есть:

ASPX-файл:

 <tr class="Specific">
    <td>
       <asp:Label
          ID="AgeLabel"
          style="vertical-align:middle"
          runat="server"
          Text="Age Demographic:"
          Font-Bold="True"
          ForeColor="#016882">
       </asp:Label>
    </td>
    <td>
       <asp:CheckBoxList ID="Age" runat="server" Width="385px">
       </asp:CheckBoxList>
    </td>
</tr>
  

ASPX.Файл CS:

 protected void Page_Load(object sender, EventArgs e)
{ 
   if (!Page.IsPostBack)
   {
      Age.Items.Add("amp;nbsp;18-24");
      Age.Items.Add("amp;nbsp;25-34");
      Age.Items.Add("amp;nbsp;35-44");
      Age.Items.Add("amp;nbsp;45-54");
      Age.Items.Add("amp;nbsp;55 ");
      MyFormPanel.Visible = true; // show the form
   } // End If
} // End Page_Load
  

Это просто заполняет флажки для меня. Я не могу заставить какой-либо валидатор работать с этим. Итак, что я сделал, это создал функцию для запуска при нажатии кнопки отправки. Эта функция проверяет, нажата ли только 1 флажок.

 protected void cmdSubmit_Click(object sender, EventArgs e)
{
   int test = 0;
   result.Text = "";

   foreach (ListItem lstItem in Age.Items)
   {
      if (lstItem.Selected == true)
      {
         test  = 1;
      }
   }
   if (test == 0)
   {
      result.Text = "Please select one of the boxes in Age Demographic.";
   }
   else if (test != 1)
   {
      result.Text = "Please select only 1 checkbox in Age Demographic.";
   }
   else
   {
      return;
   }
}
  

Мой вопрос … как я могу связать эту функцию с проверкой страницы? Мой мыслительный процесс заключается в том, что есть нечто, называемое Page .Является ли значение VALID логическим, правильно? Я думал, что я могу поместить что-то в эту функцию, которая присваивает isValid false, и если эта проверка проходит, то она присваивает isValid true . Я на правильном пути, размышляя здесь?

Я пробовал это в своем коде, но это говорит мне кое-что об этом свойстве, доступном только для чтения. У меня уже настроено много разных RequiredFieldValidators и RegularExpressionValidators, чтобы убедиться, что текстовые поля не пустые и что адреса электронной почты и номера телефонов отформатированы правильно, поэтому я не уверен, как эта функция может работать с ними. Любая помощь будет с благодарностью принята. Спасибо.

ОБНОВЛЕНИЕ: Теперь мне говорят, что пользователь может выбрать более одного флажка, поэтому список флажков является более подходящим. Но как мы будем проверять данные и включать информацию в сводку проверки?

Комментарии:

1. Будет проще использовать RadoButtonList вместо списка флажков, если вам нужно выбрать только один элемент из нескольких вариантов.

Ответ №1:

Вы хотите проверить, выбран ли хотя бы один элемент в контрольном списке?

Если это так, возможно, вы можете попробовать написать сценарий для его достижения. Вот простая демонстрация.

сценарий

 <script type="text/javascript">
function ValidateCheckBoxList(sender, args) {
    var checkBoxList = document.getElementById("<%=CheckBoxList1.ClientID %>");
    var checkboxes = checkBoxList.getElementsByTagName("input");
    var isValid = false;
    for (var i = 0; i < checkboxes.length; i  ) {
        if (checkboxes[i].checked) {
            isValid = true;
            break;
        }
    }
    args.IsValid = isValid;
}
</script>
  

CustomValidator

 <form id="form1" runat="server">
    <div>
        <asp:CheckBoxList ID="CheckBoxList1" runat="server">
            <asp:ListItem>A</asp:ListItem>
            <asp:ListItem>B</asp:ListItem>
            <asp:ListItem>C</asp:ListItem>
            <asp:ListItem>D</asp:ListItem>
        </asp:CheckBoxList>

        <asp:CustomValidator ID="CustomValidator1" ErrorMessage="You need to select at least one item." ForeColor="Red" ClientValidationFunction="ValidateCheckBoxList" runat="server" />
    </div>
    <asp:Button ID="BtnCheck" runat="server" OnClick="BtnCheck_Click" Text="Check" />
</form>
  

Если перехватить исключение System.InvalidOperationException , добавьте следующий оператор в Web.config

 <appSettings>
    <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>