代码之家  ›  专栏  ›  技术社区  ›  David Glenn

如何将javascript连接到.net中的customvalidator控件

  •  0
  • David Glenn  · 技术社区  · 15 年前

    我已经创建了一个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以设置evaluationfunction的值?例如。

    MyValidator1.evaluationfunction = "MyCustomJavascriptFunction";
    
    3 回复  |  直到 8 年前
        1
  •  1
  •   Kirtan    15 年前

    您可以这样设置基类的clientvalidationfunction属性-

    base.ClientValidationFunction = "MyCustomJavascriptFunction";
    

    所以,它会变成这样-

    MyValidator1.evaluationfunction = "MyCustomJavascriptFunction";
    

    也可以通过设置相同的属性从控件中执行此操作。

    编辑:您可以

    document.getElementById("<%= ValidatorId %>").evaluationfunction = "MyCustomJavascriptFunction";
    
        2
  •  1
  •   David Glenn    15 年前

    我自己回答过这个问题,因为另一个答案并没有完全达到我想要的。我最后用了。

    public class MyValidator : BaseValidator, IScriptControl  {
    
      protected override void AddAttributesToRender(HtmlTextWriter writer) {
        base.AddAttributesToRender(writer);
        Page.ClientScript.RegisterExpandoAttribute(this.ClientID, "evaluationfunction", "MyJavascriptFunction");
      }
    
    }
    

    这将导致控件生成:

    MyValidator1.evaluationfunction = "MyJavascriptFunction";
    
        3
  •  1
  •   Bruno Calvignac    8 年前

    实际上,更容易的是像下面这样使用asp:customvalidator的clientvalidationfunction属性。请确保不要指定ControlToValidate属性。

    <asp:CustomValidator ClientValidationFunction="MyCustomJSFunction" Text="Required" ForeColor="Red"></asp:CustomValidator>
    
    function MyCustomJSFunction(validator, args) {
        args.IsValid = my condition;
    }