CheckBoxList RequiredField Validator

Discussion in 'ASP .Net Web Controls' started by Bryce Budd, Nov 22, 2003.

  1. Bryce Budd

    Bryce Budd Guest

    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
    Bryce Budd, Nov 22, 2003
    #1
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Sean

    Help: Requiredfield validator

    Sean, Jul 31, 2003, in forum: ASP .Net
    Replies:
    2
    Views:
    358
  2. Bryce Budd

    CheckBoxList RequiredField Validator

    Bryce Budd, Nov 22, 2003, in forum: ASP .Net
    Replies:
    0
    Views:
    6,274
    Bryce Budd
    Nov 22, 2003
  3. =?Utf-8?B?Vmk=?=

    RequiredField Validator question

    =?Utf-8?B?Vmk=?=, Nov 11, 2005, in forum: ASP .Net
    Replies:
    4
    Views:
    443
    =?Utf-8?B?Vmk=?=
    Nov 11, 2005
  4. Vinitha

    ASP.NET RequiredField Validator

    Vinitha, Mar 2, 2011, in forum: .NET
    Replies:
    0
    Views:
    872
    Vinitha
    Mar 2, 2011
  5. Bryce Budd

    CheckBoxList RequiredField Validator

    Bryce Budd, Nov 22, 2003, in forum: ASP .Net Building Controls
    Replies:
    0
    Views:
    209
    Bryce Budd
    Nov 22, 2003
Loading...

Share This Page