我有一个包含 18 个(是 18 个)下拉列表和 18 个文本框的 aspx 页面。需要选择每个下拉列表,并且需要填充每个文本框。在这 36 个控件上拖放必填字段验证器并对其进行维护是一项痛苦的任务,并且似乎不是合乎逻辑的选择,因为我需要的只是让用户从下拉列表中选择一个值。
无论如何我可以遍历所有这些下拉控件和文本框控件,检查它们是否为空并相应地向用户显示警告?客户端验证解决方案或服务器端验证解决方案对我来说很好。
我有一个包含 18 个(是 18 个)下拉列表和 18 个文本框的 aspx 页面。需要选择每个下拉列表,并且需要填充每个文本框。在这 36 个控件上拖放必填字段验证器并对其进行维护是一项痛苦的任务,并且似乎不是合乎逻辑的选择,因为我需要的只是让用户从下拉列表中选择一个值。
无论如何我可以遍历所有这些下拉控件和文本框控件,检查它们是否为空并相应地向用户显示警告?客户端验证解决方案或服务器端验证解决方案对我来说很好。
使用 CustomValidator 并拥有一个客户端脚本函数,以确保每个文本框/下拉列表都有一个值。
如果您正在动态生成文本框和下拉列表,您可能还希望动态生成验证控件,但如果所有下拉列表和文本框都是静态的,您可以使用以下内容:
使用 CustomValidator Web 控件,编写客户端 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# 代码隐藏示例代码
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;
}
}
一种建议是遍历页面上的所有控件,使用递归函数将RequiredFieldValidator动态绑定到找到的控件。您可以调整我的代码以满足您的需求。
这段代码虽然有一些缺点:
.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);
}