webforms:在updatepanel中使用infragistics webdropdown

时间:2016-05-01 13:07:13

标签: c# asp.net webforms infragistics

供您参考(这是我原来的问题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我做了同样的事情,一切正常,选择(新旧)是正确的。

提前感谢您的帮助。

1 个答案:

答案 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关闭/打开(不幸的是)。