我有一个看起来像这样的类:
public class TextField : TextBox
{
public bool Required { get; set; }
RequiredFieldValidator _validator;
protected override void CreateChildControls()
{
base.CreateChildControls();
_validator = new RequiredFieldValidator();
_validator.ControlToValidate = this.ID;
if(Required)
Controls.Add(_validator);
}
public override void Render(HtmlTextWriter tw)
{
base.Render(tw);
if(Required)
_validator.RenderControl(tw);
}
}
这在始终启用 javascript 的内部应用程序中已经工作了一段时间。我最近注意到上游 javascript 错误可以阻止验证器触发,所以服务器端验证应该启动......对吗?对?
所以 Page.IsValid 属性总是返回 true (我什至尝试过事先显式调用 Page.Validate() )。
经过一番挖掘,我发现验证器 init 方法应该将验证器添加到页面中,但由于我构建它的方式,我认为这不会发生。因此,客户端验证有效,但服务器端验证无效。
我试过这个:
protected override OnInit()
{
base.OnInit();
Page.Validators.Add(_validator); // <-- validator is null here
}
但是当然验证器在这里是空的(有时它不是必需的,所以不应该添加)......但是 OnInit() 对我来说做出这些决定真的很早(Required 属性不会从 ViewState 加载例如)。
想法?