HTML Select控件的服务器事件

时间:2013-11-11 14:25:13

标签: c# html events

如何为HTML Select控件添加服务器事件?

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">    

问题是第一个选项事件永远不会触发,第二个选项就不存在了。请帮帮我,欢迎任何帮助。

2 个答案:

答案 0 :(得分:1)

2013年的答案相当保守。 select元素包含OnChange事件,请参阅:this MS doc

代码隐藏中的事件处理程序仅在发布事件后调用。对于Asp控件,您可以添加AutoPostBack属性,否则只需调用__doPostBack() javascript方法。

完整示例:

<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];
}

注意:我在Page_Load中使用以下方式动态添加的选项:

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

为什么使用原始html元素和__doPostBack调用而不是更高级别的Asp.Net控件?嗯,有时这很方便,例如与Bootstrap框架结合使用。

答案 1 :(得分:0)

runat="server"添加到其他普通HTML元素时,它将成为服务器端代码中的HtmlControl。哪个doesn't expose a lot of events。为了获得更丰富的服务器端事件,您需要使用ASP.NET控件。在这种情况下,这将是DropDownListhas 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>