供您参考(这是我最初的问题webforms:在javascript选项中动态添加到下拉列表,多亏了ConnorsFan才得以解决)。
我的目标是拥有一个支持多选的infrastics下拉列表,在每次选择时,我都希望在不刷新整个页面的情况下使用事件触发的服务器端。
这是我的aspx页面:
<%@ Register assembly="Infragistics45.Web.v16.1, Version=16.1.20161.1000, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" namespace="Infragistics.Web.UI.ListControls" tagprefix="ig" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<ig:WebDropDown ID="WebDropDown1" runat="server" Width="200px" OnSelectionChanged="WebDropDown1_SelectionChanged" EnableMultipleSelection="true" EnableClosingDropDownOnSelect="false" AutoPostBack="true">
</ig:WebDropDown>
<asp:UpdatePanel runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlId="WebDropDown1" EventName="SelectionChanged"/>
</Triggers>
</asp:UpdatePanel>
这是我的代码隐藏页:
private List<string> allPossiblechoices = new List<string>() { "a", "b", "c","d","e" };
private List<string> defaultChoices = new List<string>() { "a", "b", "c" };
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
foreach(var choice in allPossiblechoices)
{
WebDropDown1.Items.Add(
new DropDownItem()
{
Text = choice,
Value = choice,
Selected = defaultChoices.Contains(choice)
}
);
}
}
}
protected void WebDropDown1_SelectionChanged(object sender, DropDownSelectionChangedEventArgs e)
{
// I put a breakpoint here to see what e.NewSelection and e.OldSelection are
}
默认情况下,当第一次请求页面时,下拉列表由a、b、c、d、e组成,并且只选择a、b和c。
当我选择d时,一个请求确实被发送到服务器(我在事件处理程序中放置了一个断点),结果是正确的:
EventArgs e.OldSelection包含a、b、c
EventArgs e.NewSelection包含a、b、c、d。
然后,我取消选择d,结果如下:
EventArgs e.OldSelection包含a、b、c.d。
EventArgs e.NewSelection包含a、b、c、d。
我不明白为什么EventArgs e.NewSelection包含d,即使我取消了它。
更奇怪的是,我在没有updatePanel的情况下做了同样的事情,一切都很好,选择(新的和旧的)都是正确的。
提前感谢您的帮助。
您可以调用ScriptManager类的RegisterStartupScript
静态方法来添加一些Javascript代码,以便在事件处理程序返回后执行。在下面的代码中,我假设UpdatePanel的ID是UpdatePanel1
。
protected void WebDropDown1_SelectionChanged(object sender, DropDownSelectionChangedEventArgs e)
{
WebDropDown wdd = sender as WebDropDown;
string scriptCode = string.Format("document.getElementById('{0}').openDropDown();", wdd.ClientID);
ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "WDDScript1", scriptCode, true);
}
如果它有效,当面板更新时,你可能会看到WebDropDown关闭/打开(不幸的是)。