【问题标题】:ASP.NET How to validate if a box within a checkboxlist is selected (1 and only 1)ASP.NET 如何验证是否选中了复选框列表中的框(1 个且仅 1 个)
【发布时间】:2020-10-31 19:34:00
【问题描述】:

我正在尝试就我的一项任务的验证功能获得一些帮助。我完全坚持下去了。我们必须创建一个包含多个字段的 Web 表单。我已经设置了其他所有内容(用户名超过 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("&nbsp;18-24");
      Age.Items.Add("&nbsp;25-34");
      Age.Items.Add("&nbsp;35-44");
      Age.Items.Add("&nbsp;45-54");
      Age.Items.Add("&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.IsValid 的东西,它是一个布尔值,对吗?我的想法是我可以在这个函数中放入一些东西,将 IsValid 分配给 false,如果这个验证通过,那么它将 IsValid 分配给 true。我在这里的想法是否正确?

我在我的代码中试过这个,但它告诉我这个属性是只读的。我已经设置了很多不同的RequiredFieldValidators 和RegularExpressionValidators,以确保文本框不为空,并且电子邮件地址和电话号码的格式正确,所以我不确定这个函数如何与它们一起使用。任何帮助将不胜感激。谢谢。

更新:现在我被告知用户可以选择多个复选框,因此 checkboxlist 更合适。但是我们将如何验证数据并将信息包含在验证摘要中?

【问题讨论】:

  • 如果您必须从多个选项中仅选择一项,则使用 RadoButtonList 而不是 Checkbox 列表会更简单。

标签: c# asp.net validation


【解决方案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>

自定义验证器

<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>

【讨论】:

    猜你喜欢
    • 2014-10-29
    • 2021-12-13
    • 2014-11-24
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 2017-05-30
    相关资源
    最近更新 更多