自定义TextBox控件,内置客户端验证

时间:2011-01-30 19:10:30

标签: asp.net validation custom-controls

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

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

以下是我找到并试过的两种方法:

1:IValidator的实现在Validate Method中执行我的自定义验证。如下所示:Self-Validating TextBox但它没有显示如何实现客户端验证。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

对我来说听起来更合理的方法是将TextBox控件放在ASP.net页面/ usercontrol上,并在运行时动态关联代码中的验证器。在您的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验证器。