如何为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">
问题是第一个选项事件永远不会触发,第二个选项就不存在了。请帮帮我,欢迎任何帮助。
答案 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控件。在这种情况下,这将是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>