【发布时间】:2013-03-19 21:32:59
【问题描述】:
背景:我有一个用于构建表单的 CompositeControls 工具集。控件本身与一些用于基本验证任务的 jquery 验证相关联。
问题:我想通过允许开发人员使用 ASP.NET 验证器(即 RegExValidator、RequiredFieldValidator、CustomValidator 等)来验证其中之一中的数据,从而使这些 CompositeControls 的验证更加灵活我的 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 验证器配合使用(我宁愿避免在复合控件中包含所有验证器类型的实例, 除非当然有必要)?
【问题讨论】:
-
看来我遇到的实际问题与复合控件本身无关,而是复合控件包含在我开发的自定义包装控件中。 .net 将复合控件视为包装控件的子控件,因此不在页面级别(这就是验证器没有重新识别它的原因)。为了解决这个问题,我从 WebControl 而不是 CompositeControl 继承了控件并实现了 IValidator (替代方案也是继承 BaseValidator)。这似乎工作得很好,并且仍然保持我正在寻找的灵活性。
标签: asp.net validation