У меня есть класс, который выглядит так:
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, например).
Идеи