webforms:在updatepanel中使用infrastics webdropdown



供您参考(这是我最初的问题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关闭/打开(不幸的是)。

相关内容

  • 没有找到相关文章

最新更新