我向您展示一个小谜团......以下控件旨在每次验证失败,无论如何,但它不会:
public class Test : CompositeControl
{
protected override void CreateChildControls()
{
Controls.Clear();
CreateControlHierachy();
ClearChildViewState();
}
void CreateControlHierachy()
{
var validator = new CustomValidator
{
ErrorMessage = "Can't do that!"
};
validator.ServerValidate += (sender, e) =>
{
e.IsValid = false;
};
Controls.Add(validator);
}
}
要“修复”该问题,请将以下行添加到 CreateControlHierachy 并且所有工作都按预期进行:
Controls.Add(new TextBox());
该控件在 web.config 中注册并放置在一个简单的页面上,如下所示:
<uc:Test runat="server" />
在回发事件上使用调试器会显示以下内容:
- 正如预期的那样,验证器位于页面上的控件层次结构中。
- 验证器未在 Page.Validators 中注册。
- Page.IsValid 和 validator.IsValid 仍然为真。
TextBox 对验证器有什么影响,解决此问题的正确方法是什么?