供您参考(这是我原来的问题webforms : add dynamically in javascript option to a dropdownlist,感谢ConnorsFan解决了。)
我的目标是让一个infragistics下拉列表启用多项选择,并且在每次选择时我想要一个事件触发服务器端而不刷新整个页面。
这是我的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我做了同样的事情,一切正常,选择(新旧)是正确的。
提前感谢您的帮助。
答案 0 :(得分:0)
您可以调用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关闭/打开(不幸的是)。