aspx页面中多个下拉列表的必填字段验证程序

时间:2010-10-25 13:34:29

标签: asp.net validation requiredfieldvalidator

我有一个aspx页面,其中有18个(是18个)下拉列表和18个文本框。需要选择每个下拉列表,并且需要填写每个文本框。在这36个控件上拖放必需的字段验证器并维护它们是一项痛苦的任务,似乎不是合乎逻辑的选项,因为我只需要用户从下拉列表中选择一个值。

无论如何我可以遍历所有这些下拉控件和文本框控件,检查它们是否为空并相应地向用户显示警告?客户端验证解决方案或服务器端验证解决方案对我来说没问题。

3 个答案:

答案 0 :(得分:2)

使用CustomValidator并具有客户端脚本功能,确保每个文本框/下拉列表都有值。

答案 1 :(得分:0)

一个建议是遍历页面上的所有controls,使用recursive function动态绑定RequiredFieldValidator到找到的控件。您可以调整我的代码以满足您的需求。

此代码有一些缺点:

  1. 使用control.ID代替关联的标签文本
  2. 将RequiredFieldValidator添加到page.controls将修改其ControlCollection。这将打破foreach方法。因此,我只能将RequiredFieldValidator添加到Panel。

  3. 的.aspx

    <asp:Panel ID="pnlValidation" runat="server">
    </asp:Panel>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
    <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
    <br />
    <asp:DropDownList ID="DropDownList1" runat="server" />
    <asp:DropDownList ID="DropDownList2" runat="server" />
    <asp:DropDownList ID="DropDownList3" runat="server" />
    <br />
    <asp:Button ID="Button1" runat="server" Text="Button" />
    


    的.cs

    protected void Page_Load(object sender, EventArgs e)
    {
        AddValidator(this);
    }
    
    private void AddValidator(Control ctrl)
    {
        if (ctrl is TextBox || ctrl is DropDownList)
        {
            RequiredFieldValidator rfv = new RequiredFieldValidator();
            rfv.ControlToValidate = ctrl.ID;
            rfv.Display = ValidatorDisplay.Dynamic;
            rfv.ErrorMessage = ctrl.ID + " is required<br />";
            pnlValidation.Controls.Add(rfv);
        }
    
        foreach (Control subctrl in ctrl.Controls)
            AddValidator(subctrl);
    }
    

答案 2 :(得分:0)

如果您要动态生成文本框和下拉列表,您可能也希望动态生成验证控件,但如果所有下拉列表和文本框都是静态的,则可以使用以下命令:

使用CustomValidator Web Control,编写客户端javascript方法,检查下拉列表和文本框的所有属性,并使用该函数配置Web控件的ClientValidationFunction并设置EnableClientScript = true。此外,b / c并非所有用户都启用了javascript,而且为了确保这是最佳做法,还要始终创建服务器端验证功能,并在提交操作上调用Page.IsValid()。

.aspx示例代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" 

Inherits="Default2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script language="javascript" type="text/javascript">
        function ValidateMe(sender, args) {
            var txt = document.getElementById("txt");
            if (txt.value != "")
                args.IsValid = true;
            else
                args.IsValid = false;
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:TextBox id="txt" runat="server" />
        <asp:CustomValidator ClientValidationFunction="ValidateMe" ID="custval" 
            runat="server" ErrorMessage="Fail" onservervalidate="custval_ServerValidate" />
        <asp:Button ID="btn" runat="server" Text="push" onclick="btn_Click1" />
    </form>
</body>
</html>

c#c​​odebehind示例代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Globalization;
using System.Threading;


public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

        if (!IsPostBack)
        {

        }


    }

    protected void btn_Click1(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
            btn.Text = "PASS";
        }
        else
        {
            btn.Text = "FAIL";
        }
    }
    protected void custval_ServerValidate(object source, ServerValidateEventArgs args)
    {
        if (txt.Text != "")
            custval.IsValid = true;
        else
            custval.IsValid = false;
    }
}