2010-10-25 64 views
0

我有一個aspx頁面,其中有18個(是18個)下拉列表和18個文本框。需要選擇每個下拉菜單,並且需要填寫每個文本框。在這36個控件上拖放所需的字段驗證器並對其進行維護是一件痛苦的事情,似乎並不是合乎邏輯的選項,因爲我需要的只是讓用戶從下拉列表中選擇一個值。aspx頁面中多個下拉列表的必需字段驗證器

是否有反正我可以遍歷所有這些下拉控件和文本框控件,檢查它們是否爲空,並相應地向用戶顯示警告?客戶端驗證解決方案或服務器端驗證解決方案對我來說很好。

回答

2

使用CustomValidator並具有客戶端腳本函數,以確保每個文本框/下拉列表都有一個值。

0

一個建議是循環瀏覽頁面上的所有controls,使用recursive functionRequiredFieldValidator動態綁定到找到的控件。您可以調整我的代碼以滿足您的需求。

這段代碼有一些缺點,但:

  1. 使用control.ID而不是相關的標籤文本的
  2. 添加的RequiredFieldValidator到page.controls將修改它的ControlCollection。這將打破foreach方法。因此,我只能將RequiredFieldValidator添加到Panel。


的.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); 
} 
+0

喜利,我什麼都明白了,除了pnlValidation..is一個面板,所有驗證程序去????? ? – chaitanya 2010-10-27 06:42:43

+0

是的,驗證結果將顯示在pnlValidation中。 – bla 2010-10-27 08:34:29

0

如果你是動態生成的文本框和dropdownlists,你可能會想動態生成驗證控制,bu t如果所有的下拉列表和文本框都是靜態的,你可以使用以下內容:

使用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; 
    } 
} 
相關問題