Подход условной проверки UserControl? - PullRequest
0 голосов
/ 07 марта 2012

У меня есть пользовательский 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.Правда ли, что это архитектурно неправильно?Есть ли другое решение для этого, возможно, с помощью обработчика событий?

1 Ответ

2 голосов
/ 14 марта 2012

Вы можете попробовать включить валидатор, только если пользователь установит флажок. И отключите валидатор, если снимите его. Это должно быть сделано в пользовательском контроле. Это можно сделать на стороне клиента или на стороне сервера. Таким образом, страница будет проверять все валидаторы, которые включены для этой страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...