2013-11-11 4 views
1

Как добавить событие сервера для элемента управления выбором HTML?Серверное событие для HTML Выберите элемент управления

HTML код выглядит так:

<div class="ui-widget"> 
    <select id="Select1" runat="server"> 
     <option>Select one...</option> 
     <option>ActionScript</option> 
     <option>AppleScript</option> 
     <option>Asp</option> 
     <option>BASIC</option> 
    </select> 
</div> 

C# код, как это:

public void Select1_SomethingChange(object sender, EventArgs e) 
{ 
    //random code 
} 

Теперь я знаю, как это не будет работать, то вторая строка HTML нужен атрибут какого-то типа. Я уже пробовал только 2, которые я мог найти, которые являются этими двумя ниже

<select id="Select1" runat="server" onServerChanged="Select1_SomethingChange"> 
<select id="Select1" runat="server" onSelectedIndexChanged="Select1_SomethingChange">  

Проблема в том, что событие first options никогда не срабатывает, а второй вариант просто не существует. Пожалуйста, помогите мне, любая помощь приветствуется.

+2

Почему вы не используете 'DropDownList', если вам нужно получить к нему доступ на сервере? Это уже событие 'SelectedIndexChanged'. –

+0

Мне нужно использовать Select else У меня нет функции автозаполнения –

+2

@ 5tar-Kaster: Почему ты не можешь? «DropDownList» отображает клиент как «select». Это всего лишь оболочка ASP.NET, которая обеспечивает функциональность на стороне сервера, которую вы ищете. – David

ответ

0

Когда вы добавляете runat="server" в обычный нормальный элемент HTML, он становится HtmlControl в серверном коде. Какой doesn't expose a lot of events. Чтобы получить более богатые события на стороне сервера, вам необходимо использовать элементы управления ASP.NET. В этом случае это будет DropDownList, который has the events you're looking for.

Что-то вроде этого:

<div class="ui-widget"> 
    <asp:DropDownList id="Select1" OnSelectedIndexChanged="Select1_SomethingChange" runat="server"> 
     <asp:ListItem Selected="True" Value="White"> White </asp:ListItem> 
     <asp:ListItem Value="Select one...">Select one...</asp:ListItem> 
     <asp:ListItem Value="ActionScript">ActionScript</asp:ListItem> 
     <asp:ListItem Value="AppleScript">AppleScript</asp:ListItem> 
     <asp:ListItem Value="Asp">Asp</asp:ListItem> 
     <asp:ListItem Value="BASIC">BASIC</asp:ListItem> 
    </asp:DropDownList> 
</div> 
+0

Я пробовал эту последнюю ночь, и сначала я подумал, что это сработало, но событие будет срабатывать только тогда, когда вы нажмете клавишу ввода ... она должна срабатывать всякий раз, когда вы нажимаете что-то в падении тоже. Любая идея, почему это не так? –

+0

@ 5tar-Kaster: В частности, событие срабатывает, когда код отправляется обратно на сервер. Если вам понадобится код для отправки назад на сервер в любое время, когда выбранный индекс изменится, вы можете установить 'AutoPostBack =" true "' в 'DropDownList'. – David

+0

Я пробовал это, и он не работает, так как это должно произойти только при нажатии клавиши ввода при редактировании dropdownList ... Мне нужно, чтобы он срабатывал, когда вы нажимаете на элемент –

0

Ответ 2013 является довольно консервативным. Элемент select имеет событие OnChange, см.: this MS doc

Обработчик события в кодировке обращается только после сообщения о событии. Для элементов управления Asp вы добавляете атрибут AutoPostBack, иначе вы просто вызываете метод javascript __doPostBack().

Полный пример:

<select id="select_clients" runat="server" 
    OnServerChange="SelectClients_Change" onchange="__doPostBack()"> 
</select> 

фонового код:

using System.Web.UI.HtmlControls;//HtmlSelect 

protected void SelectClients_Change(object sender, EventArgs e) 
{ 
    HtmlSelect HS = sender as HtmlSelect; 
    ListItem SelectedItem = HS.Items[HS.SelectedIndex]; 
} 

NB: варианты я добавил динамически в Page_Load с помощью:

select_clients.Items.Add(new ListItem("...name...", "...value...") 

Зачем использовать примитивный HTML элементы и __doPostBack вместо более высокого уровня управления Asp.Net? Ну, иногда это удобно, например. в сочетании с базой Bootstrap.

Смежные вопросы