我创建了一个CustomValidator控件
public class MyValidator :CustomValidator, IScriptControl {}
并创建了等效的客户端脚本。服务器验证工作正常,但是如何连接我的客户端脚本?
渲染的javascript看起来像
var MyValidator1 = document.all ? document.all["MyValidator1"] : document.getElementById("MyValidator1");
MyValidator1.controltovalidate = "MyField";
MyValidator1.errormessage = "error";
MyValidator1.evaluationfunction = "MyValidatorEvaluateIsValid";
如何覆盖生成的javascript以设置evaluatefunction的值? E.g。
MyValidator1.evaluationfunction = "MyCustomJavascriptFunction";
答案 0 :(得分:1)
您可以像这样设置基类的ClientValidationFunction属性 -
base.ClientValidationFunction = "MyCustomJavascriptFunction";
所以,它会像这样呈现 -
MyValidator1.evaluationfunction = "MyCustomJavascriptFunction";
您也可以通过设置相同的属性从控件中执行此操作。
编辑:你可以做到
document.getElementById("<%= ValidatorId %>").evaluationfunction = "MyCustomJavascriptFunction";
答案 1 :(得分:1)
我自己也回答了这个问题,因为另一个答案并没有达到我想要的目的。我最终使用了。
public class MyValidator : BaseValidator, IScriptControl {
protected override void AddAttributesToRender(HtmlTextWriter writer) {
base.AddAttributesToRender(writer);
Page.ClientScript.RegisterExpandoAttribute(this.ClientID, "evaluationfunction", "MyJavascriptFunction");
}
}
这将导致控件生成:
MyValidator1.evaluationfunction = "MyJavascriptFunction";
答案 2 :(得分:1)
实际上更容易使用asp:CustomValidator的ClientValidationFunction属性,如下所示。请确保不要指定ControlToValidate属性。
<asp:CustomValidator ClientValidationFunction="MyCustomJSFunction" Text="Required" ForeColor="Red"></asp:CustomValidator>
function MyCustomJSFunction(validator, args) {
args.IsValid = my condition;
}