Обратная передача из элементов управления внутри композитного веб-элемента управления - PullRequest
1 голос
/ 11 января 2012

Допустим, у нас есть композитный веб-элемент управления с полем со списком и текстовым полем.Можно ли встроить функции управления так, чтобы при изменении текста в текстовом поле он отправлялся обратно и добавлял значение в качестве опции в поле со списком?

Я знаю, что мог бы добавить обработчик "onchange"в текстовое поле и заставить что-то работать с Javascript, но это не совсем то, что я хочу сделать.Есть ли способ просто вставить как:

Protected Sub txt1_TextChanged(sender As Object, e As System.EventArgs) Handles txt1.TextChanged
    combo1.items.add(txt1.Text)
End Sub

в код веб-элемента управления и подключиться к событию TextChanged текстового поля?

1 Ответ

1 голос
/ 11 января 2012

Короче говоря, вы должны быть в состоянии сделать это.

Я не знаю, какой синтаксис вам нужен для VB, но я делал подобные вещи несколько раз в C #. Для C # вы должны добавить имя четного обработчика в разметку вашего текстового поля и установить для автоматической обратной передачи в текстовом поле значение true. Затем код, стоящий за обработчиком событий, делает все, что вам нужно.

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

EDIT:

Вот пример с DropDownList, он был частью элемента управления для поиска пользователей в наборе доменов Active Directory. Если пользователь изменил домен, который он выбрал, мы хотели бы найти ранее введенные значения в новом домене.

Наценка:

<asp:DropDownList ID="ddl_Domain" runat="server" onselectedindexchanged="ddl_Domain_SelectedIndexChanged" AutoPostBack="True"></asp:DropDownList>

Код:

protected void ddl_Domain_SelectedIndexChanged(object sender, EventArgs e)
{
    if (UserID != "" || LastName != "" || FirstName != "" || EmailAddress != "")
    {
        lnk_Find_Click(sender, e);
    }
}

Или, если я динамически добавил дочерний элемент управления через код, я использовал следующий синтаксис:

DropDownList ddl = new DropDownList();
ddl.ID = "ddl";
ddl.DataTextField = "Text";
ddl.DataValueField = "Value";
ddl.SelectedIndexChanged += This_SelectedValue_Changed;
ddl.AutoPostBack = true; 

Как я уже сказал, я не уверен, как заставить это работать с синтаксисом Handles VB, но это должно быть возможно.

...