У меня есть пользовательский UserControl, который содержит несколько текстовых полей с валидаторами.Один TextBox с соответствующим Validator является необязательным на основе CheckBox.Псевдо:
My Control.ascx :
<asp:TextBox id="txtAddress" />
<asp:Validator id="valAddress" />
<asp:CheckBox id="condition" />
<asp:TextBox id="txtConditional" />
<asp:Validator id="valConditional" ValidationGroup="ConditionalGroup" />
My Control.ascx.cs
public void Validate() {
if(condition.Checked) {
Page.Validate("ConditionalGroup");
}
}
Iтакже есть страница, которая в основном выглядит следующим образом:
Page.aspx
<my:Control id="myControl" />
<asp:Button onClick="doPost" />
Page.aspx.cs
protected void doPost(object sender, EventArgs e) {
myControl.Validate(); //This feels wrong
if(Page.IsValid) {
//go
}
}
Это все работает, однако я хотел бы взять строку myControl.Validate()
из Page.aspx.cs
и поместить ее в My Control.ascx.cs
.Поместить его в Page_Load
элемента управления нельзя, поскольку значение флажка conditional
всегда равно false
.Нет доступных событий после Page_Load
и до обработчик клика doPost
срабатывает ...
Неправильно вызывать пользовательскийValidate
функция на Page
, где, я думаю, она должна принадлежать где-то в UserControl
.Правда ли, что это архитектурно неправильно?Есть ли другое решение для этого, возможно, с помощью обработчика событий?