Das Problem verfolgt mich schon seit meinen .NET-Anfängen, jetzt ist mir aber eine viel elegantere Lösung über den Weg gelaufen. Der Artikel "Building a CheckBoxList Validator Control" bietet ein fix und fertiges Control, was man direkt zum Validieren einer CheckBoxList einsetzen kann, auch ohne große Umstände mit .NET 2.0 und ohne Verlust irgendwelcher Features eines "normalen" RequiredFieldValidators.
Der Vollsständigkeit halber und fürs Archiv die .NET 2.0-Version:
public class RadioButtonListRequiredFieldValidator : BaseValidator
{
protected override bool ControlPropertiesValid()
{
return true;
}
protected override bool EvaluateIsValid()
{
return this.EvaluateIsChecked();
}
protected bool EvaluateIsChecked()
{
CheckBoxList _cbl = ((CheckBoxList)this.FindControl(this.ControlToValidate));
foreach (ListItem li in _cbl.Items)
{
if (li.Selected == true)
{
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("");
this.Page.ClientScript.RegisterClientScriptBlock(typeof(String), "RBLScript", sb_Script.ToString());
}
}