2013-03-19 77 views
0

背景:我有一个CompositeControls工具集,用于构建窗体。这些控件本身绑定了一些基本验证任务的jQuery验证。使用ASP.NET验证器验证复合控件数据

问题:我要让这些CompositeControls允许开发者使用ASP.NET验证程序(即RegExValidator,RequiredFieldValidator的,的CustomValidator等)来验证我的CompositeControls的一个数据更加灵活的验证。

例子:我希望开发商能够做到这样的事情:

<asp:ValidationSummary runat=server HeaderText="There were errors on the page:" /> 

<custom:TextBox id='SomeTextBox' Label='Enter Name Here:' text='' runat='server' /> 

<asp:RequiredFieldValidator runat=server ControlToValidate=SomeTextBox ErrorMessage="Name is required."> * 
</asp:RequiredFieldValidator> 

我已经加入了“ValidationProperty”的复合文本框,但RequiredFieldValidator的(或任何其他国税发验证器)似乎无法识别文本框或来自它的数据。文本框(以及我构建的所有其他自定义CompositeControls)都继承了CompositeControl,并将属性“ValidationProperty”设置为公开属性,该属性公开该控件的数据元素,并且还包含“字符串ValidationGroup”属性。

问:有谁知道还有什么或有什么具体复合控件需要发挥好与ASP.NET验证程序(我宁愿避免了在复合控件在内的所有验证类型的实例,当然,除非这是必要的)?

+0

看来,我遇到的实际问题并未与复合控件本身绑定,而是复合控件包含在我开发的自定义包装控件中。 .net认为复合控件是包装控件的子控件,因此不在页面级别(这就是验证程序没有识别它的原因)。 要解决问题,我有控制从WebControl而不是CompositeControl继承,并实现了IValidator(替代方案也将继承BaseValidator)。这似乎工作得很好,仍然保持我所寻找的灵活性。 – JakeHova 2013-04-02 14:41:05

回答

1

我最后看着这个在2005年左右,但是从我记得,这里还有两个独立的问题:

  1. 客户端验证码如何发现价值,以验证
  2. 如何服务器 - 验证发现值验证

设置ValidationProperty只会影响服务器端验证,如果我没有弄错。如果还没有,请在回发后检查服务器端的验证器的IsValid属性是否设置为false

这可能已经改变了,但我认为验证控件也只能验证具有与他们相同的命名容器的控件。

在客户端,我有点惭愧,但我认为情况仍然是验证脚本将查找一个元素,其中的客户端ID与被告知要查找的服务器ID相对应,并查找对于value属性。如果您未在客户端上公开一个,则无法找到任何要验证的内容。

如果你有时间,它将有助于很多步骤通过验证JavaScript。这将教你一个关于如何客户端验证如何找到它验证的值。

希望这会有所帮助。

+0

看来,我遇到的实际问题并未与复合控件本身绑定,而是控件包含在包装控件中。我认为ASP.net认为复合控件不在页面级别,所以.net验证器不会识别它。 您使用ValidationProperty装饰复合控件的解决方案(也很好地知道分配给此装饰器的属性必须返回一个不是布尔值的字符串)。来处理验证。 – JakeHova 2013-04-02 14:35:13