页面上有个CheckBoxList控件,用户必须选一个选项才能提交,现有的asp.net验证控件还不能验证CheckBoxList,怎么办?
1.新建CheckBoxListRequiredFieldValidator类,继承BaseValidator
namespace WebApplication2
{
public class CheckBoxListRequiredFieldValidator : BaseValidator
{
protected override bool ControlPropertiesValid()
{
return true;
}
protected override bool EvaluateIsValid()
{
return EvaluateIsChecked();
}
protected bool EvaluateIsChecked()
{
CheckBoxList _cbl = ((CheckBoxList)FindControl(ControlToValidate));
foreach (ListItem li in _cbl.Items)
{
if (li.Selected == true)
{
return true;
}
}
return false;
}
protected override void OnPreRender(EventArgs e)
{
if (EnableClientScript)
{
ClientScript();
}
base.OnPreRender(e);
}
protected void ClientScript()
{
Attributes["evaluationfunction"] = "cb_vefify";
StringBuilder sb_Script = new StringBuilder();
sb_Script.Append("<script language=/"javascript/">");
sb_Script.Append("/r");
sb_Script.Append("/r");
sb_Script.Append("function cb_vefify(val) {");
sb_Script.Append("/r");
sb_Script.Append("var val = document.all[document.all[/"");
sb_Script.Append(ID);
sb_Script.Append("/"].controltovalidate];");
sb_Script.Append("/r");
sb_Script.Append("var col = val.all;");
sb_Script.Append("/r");
sb_Script.Append("if ( col != null ) {");
sb_Script.Append("/r");
sb_Script.Append("for ( i = 0; i < col.length; i++ ) {");
sb_Script.Append("/r");
sb_Script.Append("if (col.item(i).tagName == /"INPUT/") {");
sb_Script.Append("/r");
sb_Script.Append("if ( col.item(i).checked ) {");
sb_Script.Append("/r");
sb_Script.Append("/r");
sb_Script.Append("return true;");
sb_Script.Append("/r");
sb_Script.Append("}");
sb_Script.Append("/r");
sb_Script.Append("}");
sb_Script.Append("/r");
sb_Script.Append("}");
sb_Script.Append("/r");
sb_Script.Append("/r");
sb_Script.Append("/r");
sb_Script.Append("return false;");
sb_Script.Append("/r");
sb_Script.Append("}");
sb_Script.Append("/r");
sb_Script.Append("}");
sb_Script.Append("/r");
sb_Script.Append("</script>");
Page.ClientScript.RegisterClientScriptBlock(GetType(), "RBLScript", sb_Script.ToString(), false);
}
}
}
2.编译生成dll
页面使用
<%@ Register TagPrefix="myCheckBoxList" Namespace="WebApplication2" Assembly="WebApplication2" %>
<asp:CheckBoxList ID="chkTest" runat="server" Width="132px">
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
<asp:ListItem>4</asp:ListItem>
<asp:ListItem>5</asp:ListItem>
<asp:ListItem>6</asp:ListItem>
<asp:ListItem>7</asp:ListItem>
</asp:CheckBoxList>
<myCheckBoxList:CheckBoxListRequiredFieldValidator ID="valMessage"
ControlToValidate="chkTest" RUNAT="SERVER"
EnableClientScript="true" ErrorMessage="你必须选择一个选项">
*
</myCheckBoxList:CheckBoxListRequiredFieldValidator>