一个Page页面多个CheckBoxList的客户端验证(.net1.1及2.0实现)

一,基于.net1.1
1、类文件
    
using  System;
using  System.Web.UI;
using  System.Web;
using  System.Web.UI.WebControls;
using  System.Text;

namespace  AgrExibition.Common.Framework.Util  {

    
欢迎与邀月交流,net技术与软件架构 2007/07/26
    
public class RadioButtonListRequiredFieldValidator : BaseValidator 
    
{

        
protected override bool ControlPropertiesValid()
        
{
            
return true;
        }


        
protected override bool EvaluateIsValid() 
        
{
            
return this.EvaluateIsChecked();
        }

        
protected bool EvaluateIsChecked() 
        
{
            ListControl _listcontrol 
= ((ListControl)this.FindControl(this.ControlToValidate)); 
            
foreach( ListItem li in _listcontrol.Items ) 
            
{
                
if (li.Selected) return true
            }

            
return false
        }


        
protected override void OnPreRender( EventArgs e )
        
{

            
if ( this.EnableClientScript ) this.ClientScript(); }
            
base.OnPreRender( e );

        }


        
protected void ClientScript() 
        
{
            
this.Attributes["evaluationfunction"= "cb_vefify";

            StringBuilder sb_Script 
= new StringBuilder();
            sb_Script.Append( 
"<script language="javascript">" );
            sb_Script.Append( 
" " );
            sb_Script.Append( 
" " );
            sb_Script.Append( 
"function cb_vefify(val) {" );
            sb_Script.Append( 
" " );
            sb_Script.Append(
"var val =document.getElementById(val.controltovalidate);");
            sb_Script.Append( 
" " );
            sb_Script.Append( 
"var col = val.all;" );
            sb_Script.Append( 
" " );
            sb_Script.Append( 
"if ( col != null ) {" );
            sb_Script.Append( 
" " );
            sb_Script.Append( 
"for ( i = 0; i < col.length; i++ ) {" );
            sb_Script.Append( 
" " );
            sb_Script.Append( 
"if (col.item(i).tagName.toUpperCase() == "INPUT") {" );
            sb_Script.Append( 
" " );
            sb_Script.Append( 
"if ( col.item(i).checked ) {" );
            sb_Script.Append( 
" " );
            sb_Script.Append( 
" " );
            sb_Script.Append( 
"return true;" );
            sb_Script.Append( 
" " );
            sb_Script.Append( 
"}" );
            sb_Script.Append( 
" " );
            sb_Script.Append( 
"}" );
            sb_Script.Append( 
" " );
            sb_Script.Append( 
"}" );
            sb_Script.Append( 
" " );
            sb_Script.Append( 
" " );
            sb_Script.Append( 
" " );
            sb_Script.Append( 
"return false;" );
            sb_Script.Append( 
" " );
            sb_Script.Append( 
"}" );
            sb_Script.Append( 
" " );
            sb_Script.Append( 
"}" );
            sb_Script.Append( 
" " );
            sb_Script.Append( 
"</script>" );
            
if(!this.Page.IsClientScriptBlockRegistered("RBLScript"))
            
{
                
this.Page.RegisterClientScriptBlock( "RBLScript", sb_Script.ToString() );
            }

   
        }


    }


}


2、页面
<% @ Register TagPrefix="AgrExibition" Namespace="AgrExibition.Common.Framework.Util" Assembly="AgrExibition.Common.Framework" %>
< asp:CheckBoxList  id ="cbB_Property"  runat ="server"  RepeatDirection ="Horizontal"  RepeatColumns ="3" >
                
< asp:ListItem  Value ="1" > 投资商 </ asp:ListItem >
                
< asp:ListItem  Value ="2" > 投资促进机构 </ asp:ListItem >
                
< asp:ListItem  Value ="3" > 代理商 </ asp:ListItem >
                
< asp:ListItem  Value ="4" > 科研及信息单位协会 </ asp:ListItem >
                
< asp:ListItem  Value ="5" > 零售商 </ asp:ListItem >
                
< asp:ListItem  Value ="6" > 批发商 </ asp:ListItem >
                
< asp:ListItem  Value ="7" > 仓储业 </ asp:ListItem >
                
< asp:ListItem  Value ="8" > 跨国公司 </ asp:ListItem >
                
< asp:ListItem  Value ="9" > 进出口商 </ asp:ListItem >
                
< asp:ListItem  Value ="10" > 生产商 </ asp:ListItem >
                
< asp:ListItem  Value ="11" > 超市 </ asp:ListItem >
                
< asp:ListItem  Value ="12" > 酒店 </ asp:ListItem >
                
< asp:ListItem  Value ="13" > 宾馆及后勤服务 </ asp:ListItem >
                
< asp:ListItem  Value ="-1" > 其他 </ asp:ListItem >
            
</ asp:CheckBoxList >
            
< asp:TextBox  id ="txtB_Property"  Runat ="Server"  CssClass ="input2"  Width ="400px"   />
            
< AgrExibition:RADIOBUTTONLISTREQUIREDFIELDVALIDATOR  id ="rbValid1"  Display ="Dynamic"  ErrorMessage ="请选择或输入业务性质!"
                runat
="server"  ControlToValidate ="cbB_Property"  Text ="*" > * </ AgrExibition:RADIOBUTTONLISTREQUIREDFIELDVALIDATOR >
< br />
< asp:CheckBoxList  id ="cbPurpose"  runat ="server"  RepeatDirection ="Horizontal"  RepeatColumns ="3" >
                
< asp:ListItem  Value ="1" > 采购产品 </ asp:ListItem >
                
< asp:ListItem  Value ="2" > 搜集市场信息 </ asp:ListItem >
                
< asp:ListItem  Value ="3" > 与业务伙伴会面 </ asp:ListItem >
                
< asp:ListItem  Value ="4" > 了解行业动向 </ asp:ListItem >
                
< asp:ListItem  Value ="5" > 观看观摩 </ asp:ListItem >
                
< asp:ListItem  Value ="6" > 投资项目洽谈 </ asp:ListItem >
                
< asp:ListItem  Value ="7" > 获取行业信息 </ asp:ListItem >
                
< asp:ListItem  Value ="8" > 寻找供应商或买家 </ asp:ListItem >
                
< asp:ListItem  Value ="-1" > 其他 </ asp:ListItem >
            
</ asp:CheckBoxList >
            
< asp:TextBox  id ="txtPurpose"  Runat ="Server"  CssClass ="input2"  Width ="400px"   />
            
< AgrExibition:RADIOBUTTONLISTREQUIREDFIELDVALIDATOR  id ="rbValid2"  Display ="Dynamic"  ErrorMessage ="请选择或输入参会目的!"
                runat
="server"  ControlToValidate ="cbPurpose"  Text ="*" > * </ AgrExibition:RADIOBUTTONLISTREQUIREDFIELDVALIDATOR >
        
< asp:ValidationSummary  id ="ValidationSummary1"  runat ="server"  ShowMessageBox ="True"  ShowSummary ="False"
    HeaderText
="请检查输入表单内容:" ></ asp:ValidationSummary >


二、基于.net 2.0
1、类文件
using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Text;
using  System.Web;
using  System.Web.UI;
using  System.Web.UI.WebControls;

namespace  ShiXun.Commoon.Web.Validor
{
   
   
欢迎与邀月交流,net技术与软件架构 2007/07/26
   
    [DefaultProperty(
"ErrorMessage"), ToolboxData("<{0}:ListControlRequiredFieldValidator runat=server></{0}:ListControlRequiredFieldValidator>")]
    
public class ListControlRequiredFieldValidator : BaseValidator
    
{
        
/// <summary>
        
/// Validator Requirement
        
/// </summary>

        
/// <returns>True if dependencies are valid.</returns>

        protected override bool ControlPropertiesValid()
        
{
            Control controlToValidate 
= FindControl(ControlToValidate) as ListControl;
            
return (controlToValidate != null);
        }


        
/// <summary>
        
/// Validator Requirement
        
/// </summary>
        
/// <returns>true if ControlToValidate 
        
/// has one item or more selected</returns>


        
protected override bool EvaluateIsValid()
        
{
            
return this.EvaluateIsChecked();
        }


        
/// <summary>
        
/// Return true if an item in the list is selected.
        
/// </summary>
        
/// <returns>true if ControlToValidate 
        
///      has one item or more selected</returns>

        protected bool EvaluateIsChecked()
        
{
            ListControl listToValidate 
= ((ListControl)this.FindControl(this.ControlToValidate));

            
foreach (ListItem li in listToValidate.Items)
            
{
                
if (li.Selected == true)
                    
return true;
            }

            
return false;
        }


        
/// <summary>

        
/// Pre Render
        
/// </summary>
        
/// <param name="e"></param >

        protected override void OnPreRender(EventArgs e)
        
{
            System.Web.HttpContext.Current.Trace.Write(
"Override OnPreRender");
            
if (this.DetermineRenderUplevel() && this.EnableClientScript)
            
{
                Page.ClientScript.RegisterExpandoAttribute(
this.ClientID, "evaluationfunction""ListItemVerify");
                Page.ClientScript.RegisterExpandoAttribute(
this.ClientID, "minimumNumberOfSelectedCheckBoxes""1");

                
//System.Web.UI.Page.(this.ClientID, "evaluationfunction", "ListItemVerify");
                
//Page.ClientScript.RegisterExpandoAttribute(this.ClientID, "minimumNumberOfSelectedCheckBoxes", "1"); 


                
//TODO: imporove to allow variable number.
                this.RegisterClientScript();
            }

            
else
            
{
                
this.Attributes.Remove("evaluationfunction");
            }

            
base.OnPreRender(e);
        }


        
/// <summary>
        
/// Register the client script.
        
/// </summary>


        
protected void RegisterClientScript()
        
{
            
string script = @"

            <script language=""javascript"">
            function ListItemVerify(val) 
            {
                var control = document.getElementById(val.controltovalidate);
                var minimumNumberOfSelectedCheckBoxes = parseInt(val.minimumNumberOfSelectedCheckBoxes);
                var selectedItemCount = 0;
                var liIndex = 0;
                var currentListItem = document.getElementById(control.id + '_' + liIndex.toString());
                while (currentListItem != null)
                {
                    if (currentListItem.checked) selectedItemCount++;
                    liIndex++;
                    currentListItem = document.getElementById(control.id + '_' + liIndex.toString());
                }
                return selectedItemCount >= minimumNumberOfSelectedCheckBoxes;
            }
            </script>
            
";

            
this.Page.ClientScript.RegisterClientScriptBlock(typeof(ListControlRequiredFieldValidator), "ListRequiredValidator_Script", script);
        }


    }

}


2、页面

<% @ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default"  %>
<% @ Register TagPrefix="ShiXun" NameSpace="ShiXun.Commoon.Web.Validor" Assembly="ShiXun.Commoon.Web.Validor"  %>

<! 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 >
</ head >
< body >
    
< form  id ="form1"  runat ="server" >
   
< asp:CheckBoxList  id ="cbB_Property"  runat ="server"  RepeatDirection ="Horizontal"  RepeatColumns ="3" >
                
< asp:ListItem  Value ="1" > 投资商 </ asp:ListItem >
                
< asp:ListItem  Value ="2" > 投资促进机构 </ asp:ListItem >
                
< asp:ListItem  Value ="3" > 代理商 </ asp:ListItem >
                
< asp:ListItem  Value ="4" > 科研及信息单位协会 </ asp:ListItem >
                
< asp:ListItem  Value ="5" > 零售商 </ asp:ListItem >
                
< asp:ListItem  Value ="6" > 批发商 </ asp:ListItem >
                
< asp:ListItem  Value ="7" > 仓储业 </ asp:ListItem >
                
< asp:ListItem  Value ="8" > 跨国公司 </ asp:ListItem >
                
< asp:ListItem  Value ="9" > 进出口商 </ asp:ListItem >
                
< asp:ListItem  Value ="10" > 生产商 </ asp:ListItem >
                
< asp:ListItem  Value ="11" > 超市 </ asp:ListItem >
                
< asp:ListItem  Value ="12" > 酒店 </ asp:ListItem >
                
< asp:ListItem  Value ="13" > 宾馆及后勤服务 </ asp:ListItem >
                
< asp:ListItem  Value ="-1" > 其他 </ asp:ListItem >
            
</ asp:CheckBoxList >
            
< ShiXun:ListControlRequiredFieldValidator
    
ControlToValidate ="cbB_Property"  
    display
="Dynamic"  
    ErrorMessage
="至少选择一项!"  
    EnableClientScript
="true"  
    runat
="Server" >
    至少选择一项
</ ShiXun:ListControlRequiredFieldValidator >
        
< br  />
        
< br  />
        
< asp:CheckBoxList  ID ="cbPurpose"  runat ="server"  RepeatColumns ="3"  RepeatDirection ="Horizontal" >
            
< asp:ListItem  Value ="1" > 采购产品 </ asp:ListItem >
            
< asp:ListItem  Value ="2" > 搜集市场信息 </ asp:ListItem >
            
< asp:ListItem  Value ="3" > 与业务伙伴会面 </ asp:ListItem >
            
< asp:ListItem  Value ="4" > 了解行业动向 </ asp:ListItem >
            
< asp:ListItem  Value ="5" > 观看观摩 </ asp:ListItem >
            
< asp:ListItem  Value ="6" > 投资项目洽谈 </ asp:ListItem >
            
< asp:ListItem  Value ="7" > 获取行业信息 </ asp:ListItem >
            
< asp:ListItem  Value ="8" > 寻找供应商或买家 </ asp:ListItem >
            
< asp:ListItem  Value ="-1" > 其他 </ asp:ListItem >
        
</ asp:CheckBoxList >
        
< ShiXun:ListControlRequiredFieldValidator
    
ControlToValidate ="cbPurpose"  
    display
="Dynamic"  
    ErrorMessage
="至少选择一项!"  
    EnableClientScript
="true"  
    runat
="Server" >
    至少选择一项
</ ShiXun:ListControlRequiredFieldValidator >
        
< br  />
        
< asp:CheckBoxList  ID ="cbChannel"  runat ="server"  RepeatColumns ="3"  RepeatDirection ="Horizontal" >
            
< asp:ListItem  Value ="1" > 报纸等平面媒体 </ asp:ListItem >
            
< asp:ListItem  Value ="2" > 网络 </ asp:ListItem >
            
< asp:ListItem  Value ="3" > 电视 </ asp:ListItem >
            
< asp:ListItem  Value ="4" > 朋友介绍 </ asp:ListItem >
            
< asp:ListItem  Value ="5" > 客户推荐 </ asp:ListItem >
            
< asp:ListItem  Value ="-1" > 其他 </ asp:ListItem >
        
</ asp:CheckBoxList >
        
< ShiXun:ListControlRequiredFieldValidator
    
ControlToValidate ="cbChannel"  
    display
="Dynamic"  
    ErrorMessage
="至少选择一项!"  
    EnableClientScript
="true"  
    runat
="Server" >
    至少选择一项
</ ShiXun:ListControlRequiredFieldValidator >
        
< asp:TextBox  ID ="txtSourceChannel"  runat ="Server"  CssClass ="input2"  Width ="400px" ></ asp:TextBox >
        
< br  />
        
< br  />
        
< br  />
        
< asp:Button  ID ="Button1"  runat ="server"  Text ="Button"   />
    
</ form >
</ body >
</ html >

你可能感兴趣的:(checkbox)