Date: 02/27/09 (C Sharp) Keywords: html, xml, java, web I’m having some “fun” with client-side validation on a roll-my-own BaseValidator subclass. My validator is to validate email format and includes the following code (with XMLdoc removed for brevity): using System;
using System.Text.RegularExpressions;
namespace IrisDigital.WebControls.Validation
{
[System.Web.UI.ToolboxData("<{0}:EmailValidator runat='server'/>")]
public class EmailValidator : BaseValidator
{
protected override void AddAttributesToRender(System.Web.UI.HtmlTextWriter writer)
{
base.AddAttributesToRender(writer);
if (base.RenderUplevel)
{
writer.AddAttribute("evaluationfunction", "CheckEmailFormat");
writer.AddAttribute("controltovalidate", this.GetControlRenderID(this.ControlToValidate));
}
}
protected override bool EvaluateIsValid()
{
// ...
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
if (base.RenderUplevel)
{
if (!Page.ClientScript.IsClientScriptBlockRegistered("IrisDigital.WebControls.Validation.EmailValidator"))
{
Page.ClientScript.RegisterClientScriptInclude("IrisDigital.WebControls.Validation.EmailValidator",
Page.ClientScript.GetWebResourceUrl(this.GetType(), "IrisDigital.WebControls.Validation.EmailValidator.js"));
}
this.ClientValidationFunction = "CheckEmailFormat";
}
}
Most of the rationale for doing things this way is from an article on CodeProject: RequiredIfValidator — Extending from the BaseValidator class, which does it precisely this way. The validator works wonderfully. But the client-side validation never fires. The WebResource correctly gets added to the page as a script include (for which I need to have the following line in my AssemblyInfo.cs, in case you were wondering): [assembly: System.Web.UI.WebResource("IrisDigital.WebControls.Validation.EmailValidator.js", "text/javascript")]
, but it just never gets called. Anyone got any ideas why? Cross-posted to
|