使用ASP.NET验证程序验证Composite Control数据

时间:2013-03-19 21:32:59

标签: asp.net validation

后台:我有一个CompositeControls工具集,我用它来构建表单。控件本身与基本验证任务的某些jquery验证相关联。

问题:我想通过允许开发人员使用ASP.NET验证器(即RegExValidator,RequiredFieldValidator,CustomValidator等)来验证其中一个中的数据,从而使这些CompositeControl的验证更加灵活。我的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>

我添加了&#34; ValidationProperty&#34;到复合文本框,但RequiredFieldValidator(或任何其他验证器)似乎无法识别文本框或来自它的数据。文本框(以及我构建的所有其他自定义CompositeControls)继承CompositeControl,具有属性&#34; ValidationProperty&#34;设置为公开控件的数据元素的公共属性,并包含一个&#34;字符串ValidationGroup&#34;财产也是如此。

问题:是否有人知道复合控件需要什么,或者具体使用什么才能与ASP.NET验证器一起使用(我更喜欢避免包含所有验证器类型的实例)复合控制,除非当然是必要的)?

1 个答案:

答案 0 :(得分:1)

我在2005年左右对此进行了调查,但从我记忆中看,这里有两个不同的问题:

  1. 客户端验证代码如何找到要验证的值
  2. 服务器端验证如何找到要验证的值
  3. 如果我没有弄错的话,设置ValidationProperty只会影响服务器端验证。如果您还没有,请在回发后检查验证程序的IsValid属性是否在服务器端设置为false

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

    在客户端,我有点朦胧,但我认为情况仍然是验证脚本会查找一个元素,其客户端ID对应于它被告知要查找的服务器ID,并寻找一个value属性。如果您没有在客户端上公开一个,那么它将无法找到任何要验证的内容。

    如果你有时间,那么逐步完成验证javascript会有很大帮助。这将教你很多关于客户端验证如何找到它验证的值。

    希望这会有所帮助。