CheckBoxList RequiredField Validator

B

Bryce Budd

Hello All,

I've been a taker of information from newsgroups for a long time and thought
I'd finally make a contribution back to the community whose supported me
when I've needed it. After all before commercialization took over that was
the beauty of the Internet!

I've create a checkboxlist validator control...something MS should have done
originally in my opinion, but nonetheless here it is. It's a C# control,
sort of IE specific. This is posted AS IS, I'll provide no support, but
will accept a thank you or criticism.

Happy Thanksgiving!

SOURCE FOLLOWS:

<!-- BEGIN CHECKBOXLIST REQUIRED FIELD VALIDATOR
(CheckBoxListRequiredFieldValidator.cs) -->

using System;
using System.Text;
using System.Web.UI;
using System.Resources;
using System.Reflection;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;

namespace Common.Controls
{
/// <summary>
/// Makes the associated checkboxlist control a required field
/// </summary>
public class CheckBoxListRequiredFieldValidator : BaseValidator
{

/// <summary>
/// Initializes a new instance of the CheckBoxListRequiredFieldValidator
class
/// </summary>
public CheckBoxListRequiredFieldValidator()
{
this.Attributes["evaluationfunction"] = "EvaluateCheckBoxListIsValid";
this.Attributes["initialvalue"] = "";
}

/// <summary>
/// Determines whether this validator can validate the associated control
/// </summary>
/// <returns>True</returns>
protected override bool ControlPropertiesValid()
{
return true;
}

/// <summary>
/// Determines whether the checkboxlist associated to this control is
valid
/// </summary>
/// <returns>True if it is valid, otherwise false</returns>
protected override bool EvaluateIsValid()
{
return EvaluateIsChecked();
}

/// <summary>
/// Determines whether a choice in the checkboxlist has been selected
/// </summary>
/// <returns>True if a choice has been selected, otherwise false</returns>
protected bool EvaluateIsChecked()
{
bool retVal = false;
CheckBoxList list = (CheckBoxList)FindControl(ControlToValidate);

foreach(ListItem item in list.Items)
{
if (item.Selected)
{
return true;
}
}
return false;
}

/// <summary>
/// Raises the PreRender event
/// </summary>
/// <param name="e">EventArgs that contain the event data</param>
protected override void OnPreRender(EventArgs e)
{
if (this.EnableClientScript)
{
if (!Page.IsClientScriptBlockRegistered("CheckBoxList"))
{
Page.RegisterClientScriptBlock("CheckBoxList", "<script
language="JavaScript" type="text/javascript">function
EvaluateCheckBoxListIsValid(val) {var control =
document.all[val.controltovalidate];var col = control.all;if ( col != null )
{for ( i=0; i<col.length; i++ ) {if (col.item(i).type == "checkbox") {if (
col.item(i).checked ) {return true;}}}}return false;}</script>");
}
}
base.OnPreRender(e);
}
}
}

<!-- END CHECKBOXLIST REQUIRED FIELD VALIDATOR -->

<!-- BEGIN UPDATED WEBUIVALIDATION SCRIPT (webuivalidation.js) -->

var Page_ValidationVer = "125";
var Page_IsValid = true;
var Page_BlockSubmit = false;
function ValidatorUpdateDisplay(val) {
if (typeof(val.display) == "string") {
if (val.display == "None") {
return;
}
if (val.display == "Dynamic") {
val.style.display = val.isvalid ? "none" : "inline";
return;
}
}
val.style.visibility = val.isvalid ? "hidden" : "visible";
}
function ValidatorUpdateIsValid() {
var i;
for (i = 0; i < Page_Validators.length; i++) {
if (!Page_Validators.isvalid) {
Page_IsValid = false;
return;
}
}
Page_IsValid = true;
}
function ValidatorHookupControlID(controlID, val) {
if (typeof(controlID) != "string") {
return;
}
var ctrl = document.all[controlID];
if (typeof(ctrl) != "undefined") {
ValidatorHookupControl(ctrl, val);
}
else {
val.isvalid = true;
val.enabled = false;
}
}
function ValidatorHookupControl(control, val) {
if (typeof(control.tagName) == "undefined" && typeof(control.length) ==
"number") {
var i;
for (i = 0; i < control.length; i++) {
var inner = control;
if (typeof(inner.value) == "string") {
ValidatorHookupControl(inner, val);
}
}
return;
}
else if (control.tagName != "INPUT" && control.tagName != "TEXTAREA" &&
control.tagName != "SELECT") {
var i;
for (i = 0; i < control.children.length; i++) {
ValidatorHookupControl(control.children, val);
}
return;
}
else {
if (typeof(control.Validators) == "undefined") {
control.Validators = new Array;
var ev;
// Added type == "checkbox"
if (control.type == "radio" || control.type == "checkbox") {
ev = control.onclick;
} else {
ev = control.onchange;
}
if (typeof(ev) == "function" ) {
ev = ev.toString();
ev = ev.substring(ev.indexOf("{") + 1, ev.lastIndexOf("}"));
}
else {
ev = "";
}
var func = new Function("ValidatorOnChange(); " + ev);
// Added type == "checkbox"
if (control.type == "radio" || control.type == "checkbox") {
control.onclick = func;
} else {
control.onchange = func;
}
}
control.Validators[control.Validators.length] = val;
}
}
function ValidatorGetValue(id) {
var control;
control = document.all[id];
if (typeof(control.value) == "string") {
return control.value;
}
if (typeof(control.tagName) == "undefined" && typeof(control.length) ==
"number") {
var j;
for (j=0; j < control.length; j++) {
var inner = control[j];
// Added type != "checkbox"
if (typeof(inner.value) == "string" && (inner.type != "radio" ||
inner.type != "checkbox" || inner.status == true)) {
return inner.value;
}
}
}
else {
return ValidatorGetValueRecursive(control);
}
return "";
}
function ValidatorGetValueRecursive(control)
{
// Added type != "checkbox"
if (typeof(control.value) == "string" && (control.type != "radio" ||
inner.type != "checkbox" || control.status == true)) {
return control.value;
}
var i, val;
for (i = 0; i<control.children.length; i++) {
val = ValidatorGetValueRecursive(control.children);
if (val != "") return val;
}
return "";
}
function Page_ClientValidate() {
var i;
for (i = 0; i < Page_Validators.length; i++) {
ValidatorValidate(Page_Validators);
}
ValidatorUpdateIsValid();
ValidationSummaryOnSubmit();
Page_BlockSubmit = !Page_IsValid;
return Page_IsValid;
}
function ValidatorCommonOnSubmit() {
event.returnValue = !Page_BlockSubmit;
Page_BlockSubmit = false;
}
function ValidatorEnable(val, enable) {
val.enabled = (enable != false);
ValidatorValidate(val);
ValidatorUpdateIsValid();
}
function ValidatorOnChange() {
var vals = event.srcElement.Validators;
var i;
for (i = 0; i < vals.length; i++) {
ValidatorValidate(vals);
}
ValidatorUpdateIsValid();
}
function ValidatorValidate(val) {
val.isvalid = true;
if (val.enabled != false) {
if (typeof(val.evaluationfunction) == "function") {
val.isvalid = val.evaluationfunction(val);
}
}
ValidatorUpdateDisplay(val);
}
function ValidatorOnLoad() {
if (typeof(Page_Validators) == "undefined")
return;
var i, val;
for (i = 0; i < Page_Validators.length; i++) {
val = Page_Validators;
if (typeof(val.evaluationfunction) == "string") {
eval("val.evaluationfunction = " + val.evaluationfunction +
";");
}
if (typeof(val.isvalid) == "string") {
if (val.isvalid == "False") {
val.isvalid = false;
Page_IsValid = false;
}
else {
val.isvalid = true;
}
} else {
val.isvalid = true;
}
if (typeof(val.enabled) == "string") {
val.enabled = (val.enabled != "False");
}
ValidatorHookupControlID(val.controltovalidate, val);
ValidatorHookupControlID(val.controlhookup, val);
}
Page_ValidationActive = true;
}
function ValidatorConvert(op, dataType, val) {
function GetFullYear(year) {
return (year + parseInt(val.century)) - ((year < val.cutoffyear) ? 0
: 100);
}
var num, cleanInput, m, exp;
if (dataType == "Integer") {
exp = /^\s*[-\+]?\d+\s*$/;
if (op.match(exp) == null)
return null;
num = parseInt(op, 10);
return (isNaN(num) ? null : num);
}
else if(dataType == "Double") {
exp = new RegExp("^\\s*([-\\+])?(\\d+)?(\\" + val.decimalchar +
"(\\d+))?\\s*$");
m = op.match(exp);
if (m == null)
return null;
cleanInput = m[1] + (m[2].length>0 ? m[2] : "0") + "." + m[4];
num = parseFloat(cleanInput);
return (isNaN(num) ? null : num);
}
else if (dataType == "Currency") {
exp = new RegExp("^\\s*([-\\+])?(((\\d+)\\" + val.groupchar +
")*)(\\d+)"
+ ((val.digits > 0) ? "(\\" + val.decimalchar +
"(\\d{1," + val.digits + "}))?" : "")
+ "\\s*$");
m = op.match(exp);
if (m == null)
return null;
var intermed = m[2] + m[5] ;
cleanInput = m[1] + intermed.replace(new RegExp("(\\" +
val.groupchar + ")", "g"), "") + ((val.digits > 0) ? "." + m[7] : 0);
num = parseFloat(cleanInput);
return (isNaN(num) ? null : num);
}
else if (dataType == "Date") {
var yearFirstExp = new
RegExp("^\\s*((\\d{4})|(\\d{2}))([-./])(\\d{1,2})\\4(\\d{1,2})\\s*$");
m = op.match(yearFirstExp);
var day, month, year;
if (m != null && (m[2].length == 4 || val.dateorder == "ymd")) {
day = m[6];
month = m[5];
year = (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3],
10))
}
else {
if (val.dateorder == "ymd"){
return null;
}
var yearLastExp = new
RegExp("^\\s*(\\d{1,2})([-./])(\\d{1,2})\\2((\\d{4})|(\\d{2}))\\s*$");
m = op.match(yearLastExp);
if (m == null) {
return null;
}
if (val.dateorder == "mdy") {
day = m[3];
month = m[1];
}
else {
day = m[1];
month = m[3];
}
year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6],
10))
}
month -= 1;
var date = new Date(year, month, day);
return (typeof(date) == "object" && year == date.getFullYear() &&
month == date.getMonth() && day == date.getDate()) ? date.valueOf() : null;
}
else {
return op.toString();
}
}
function ValidatorCompare(operand1, operand2, operator, val) {
var dataType = val.type;
var op1, op2;
if ((op1 = ValidatorConvert(operand1, dataType, val)) == null)
return false;
if (operator == "DataTypeCheck")
return true;
if ((op2 = ValidatorConvert(operand2, dataType, val)) == null)
return true;
switch (operator) {
case "NotEqual":
return (op1 != op2);
case "GreaterThan":
return (op1 > op2);
case "GreaterThanEqual":
return (op1 >= op2);
case "LessThan":
return (op1 < op2);
case "LessThanEqual":
return (op1 <= op2);
default:
return (op1 == op2);
}
}
function CompareValidatorEvaluateIsValid(val) {
var value = ValidatorGetValue(val.controltovalidate);
if (ValidatorTrim(value).length == 0)
return true;
var compareTo = "";
if (null == document.all[val.controltocompare]) {
if (typeof(val.valuetocompare) == "string") {
compareTo = val.valuetocompare;
}
}
else {
compareTo = ValidatorGetValue(val.controltocompare);
}
return ValidatorCompare(value, compareTo, val.operator, val);
}
function CustomValidatorEvaluateIsValid(val) {
var value = "";
if (typeof(val.controltovalidate) == "string") {
value = ValidatorGetValue(val.controltovalidate);
if (ValidatorTrim(value).length == 0)
return true;
}
var args = { Value:value, IsValid:true };
if (typeof(val.clientvalidationfunction) == "string") {
eval(val.clientvalidationfunction + "(val, args) ;");
}
return args.IsValid;
}
function RegularExpressionValidatorEvaluateIsValid(val) {
var value = ValidatorGetValue(val.controltovalidate);
if (ValidatorTrim(value).length == 0)
return true;
var rx = new RegExp(val.validationexpression);
var matches = rx.exec(value);
return (matches != null && value == matches[0]);
}
function ValidatorTrim(s) {
var m = s.match(/^\s*(\S+(\s+\S+)*)\s*$/);
return (m == null) ? "" : m[1];
}
function RequiredFieldValidatorEvaluateIsValid(val) {
return (ValidatorTrim(ValidatorGetValue(val.controltovalidate)) !=
ValidatorTrim(val.initialvalue))
}
function RangeValidatorEvaluateIsValid(val) {
var value = ValidatorGetValue(val.controltovalidate);
if (ValidatorTrim(value).length == 0)
return true;
return (ValidatorCompare(value, val.minimumvalue, "GreaterThanEqual",
val) &&
ValidatorCompare(value, val.maximumvalue, "LessThanEqual",
val));
}
function ValidationSummaryOnSubmit() {
if (typeof(Page_ValidationSummaries) == "undefined")
return;
var summary, sums, s;
for (sums = 0; sums < Page_ValidationSummaries.length; sums++) {
summary = Page_ValidationSummaries[sums];
summary.style.display = "none";
if (!Page_IsValid) {
if (summary.showsummary != "False") {
summary.style.display = "";
if (typeof(summary.displaymode) != "string") {
summary.displaymode = "BulletList";
}
switch (summary.displaymode) {
case "List":
headerSep = "<br>";
first = "";
pre = "";
post = "<br>";
final = "";
break;
case "BulletList":
default:
headerSep = "";
first = "<ul>";
pre = "<li>";
post = "</li>";
final = "</ul>";
break;
case "SingleParagraph":
headerSep = " ";
first = "";
pre = "";
post = " ";
final = "<br>";
break;
}
s = "";
if (typeof(summary.headertext) == "string") {
s += summary.headertext + headerSep;
}
s += first;
for (i=0; i<Page_Validators.length; i++) {
if (!Page_Validators.isvalid &&
typeof(Page_Validators.errormessage) == "string") {
s += pre + Page_Validators.errormessage + post;
}
}
s += final;
summary.innerHTML = s;
window.scrollTo(0,0);
}
if (summary.showmessagebox == "True") {
s = "";
if (typeof(summary.headertext) == "string") {
s += summary.headertext + "<BR>";
}
for (i=0; i<Page_Validators.length; i++) {
if (!Page_Validators.isvalid &&
typeof(Page_Validators.errormessage) == "string") {
switch (summary.displaymode) {
case "List":
s += Page_Validators.errormessage +
"<BR>";
break;
case "BulletList":
default:
s += " - " +
Page_Validators.errormessage + "<BR>";
break;
case "SingleParagraph":
s += Page_Validators.errormessage + " ";
break;
}
}
}
span = document.createElement("SPAN");
span.innerHTML = s;
s = span.innerText;
alert(s);
}
}
}
}


<!-- END UPDATED WEBUIVALIDATION SCRIPT -->


<!-- USAGE NOTES -->

These are NOT comprehensive just intended to get you started..It assumes you
know
how to compile projects, understand namespaces and know how to register a
control.

1.) Copy CheckBoxListRequiredFieldValidator to a .cs class file
a.) You may need to adjust the namespace to your own

2.) Backup your webuivalidation.js file (Inetput\wwwroot\aspnet_client
folder)

3.) Copy the webuivalidation script above over the existing file contents.
a.) I've commented the four lines that had to be changed for reference.

4.) In aspx page register the CheckBoxListRequiredFieldValidator using your
namespace

5.) Attach a checkboxlist control to custom validator and validate
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,756
Messages
2,569,535
Members
45,008
Latest member
obedient dusk

Latest Threads

Top