I have created a CustomValidator control
public class MyValidator :CustomValidator, IScriptControl {}
and also created the equivalent client sc
I've answered this myself as the other answer didn't quite achieve exactly what I wanted. I ended up using.
public class MyValidator : BaseValidator, IScriptControl {
protected override void AddAttributesToRender(HtmlTextWriter writer) {
base.AddAttributesToRender(writer);
Page.ClientScript.RegisterExpandoAttribute(this.ClientID, "evaluationfunction", "MyJavascriptFunction");
}
}
Which will cause the control to generate:
MyValidator1.evaluationfunction = "MyJavascriptFunction";
You can set the ClientValidationFunction property of the base class like this -
base.ClientValidationFunction = "MyCustomJavascriptFunction";
So, it will render it like this -
MyValidator1.evaluationfunction = "MyCustomJavascriptFunction";
You can do it from the control also by setting the same property.
EDIT: You can do
document.getElementById("<%= ValidatorId %>").evaluationfunction = "MyCustomJavascriptFunction";
Actually much easier is to use the ClientValidationFunction property of the asp:CustomValidator like below. Be sure NOT to specify a ControlToValidate property.
<asp:CustomValidator ClientValidationFunction="MyCustomJSFunction" Text="Required" ForeColor="Red"></asp:CustomValidator>
function MyCustomJSFunction(validator, args) {
args.IsValid = my condition;
}