【问题标题】:Custom TextBox Control with built-in client-side validation具有内置客户端验证的自定义文本框控件
【发布时间】:2011-06-18 05:00:55
【问题描述】:

我的应用程序中有一个文本框,上面有多个验证,例如RequiredFieldValidator、RegexValidation 和 CustomValidation。我的页面有几个类似的文本框。所以我只需复制粘贴并更改 id 和 controltovalidate 属性,它就可以工作了。

由于类似的 tbxs 也将在另一个页面上使用,我认为创建我自己的带有内置验证的自定义 TextBox 控件会很好。

这是我找到并尝试过的两种方法:

1:从 IValidator 实现在 Validate Method 中执行我的自定义验证。如下图:Self-Validating TextBox 但并未展示如何实现客户端验证。

2:创建从 TextBox 派生的自定义控件并添加我需要的 asp.net 内置验证器。如图所示:Custom TextBox。我尝试了代码,它可以在服务器/客户端运行。

我喜欢第一种方法,但不知道如何实现客户端验证。我知道我需要一个客户端 js 函数。我能做到。我知道如何使用 Page.ClientScript 类包含我的 js 文件,但不知道如何将所有内容集成在一起并使其工作。

我可以创建一个 UserControl 或上面的第二种方法,但现在我特别希望从自定义控件中学习和实现客户端验证。

我正在使用 Asp.Net 2.0。感谢您的任何建议。

【问题讨论】:

    标签: asp.net validation custom-controls


    【解决方案1】:

    嗯,你是对的,你总是可以实现从 TextBox 派生并自动关联几个验证器的自定义服务器控件。但通常你不会创建自定义控件,只要它不是明确需要的,然后通过几个不同的项目。对于 client-side 验证,您通常需要 JavaScript,但请注意,大多数 ASP.net 验证控件已经内置了它们的客户端验证(即必需的字段验证器、范围验证器、.. .)。其他(如自定义验证器)允许挂钩您的自定义 javascript。

    一种对我来说听起来更合理的方法是让您的 TextBox 控件与您的 ASP.net 页面/用户控件上一样,并在运行时动态关联您的代码中的验证器。假设在您的OnInit 事件中,您调用了一个函数RegisterRequiredValidators,传入一个TextBoxes 列表。我只是在大声思考:

    public override void OnInit(...)
    {
       ...
       RegisterRequiredValidators(
          txtFirstname, 
          txtSurname, 
          txtAge
       }
       ...
    }
    
    public void RegisterRequiredValidators(params Control[] textBoxes)
    {
       //execute the logic of creating and attaching validators
    }
    

    这只是一个愚蠢的例子,只是为了解释上下文。理论上,您可以发展这个概念来注册任何类型的验证器。我们在工作中做了类似的事情,通过以“规则”的形式抽象出来,最终呈现为前端的 ASP.net 验证器。

    【讨论】:

    • 谢谢朱里。是的,我知道内置验证器附带的客户端验证,这就是我提到的第二种方法的工作原理。我将在不止一个页面上多次使用此控件,并且可能还会在其他项目中使用此控件。我怀疑您建议的方法是否适合我的需要。如果我不能采用第一种方式工作,我想我会采用第二种方式。
    猜你喜欢
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2016-11-14
    • 2017-12-13
    相关资源
    最近更新 更多