2016-05-01 61 views
1

For your information(這是我的原始問題webforms : add dynamically in javascript option to a dropdownlist,感謝ConnorsFan解決)。webforms:在updatepanel中使用infragistics webdropdown

我的目標是讓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包含,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

您是否嘗試在UpdatePanel中放置'WebDropDown1'? – ConnorsFan

+0

我不想把它放進去,因爲在webdropdown1的每次選擇中,它將被關閉,所以一次做多選的事實將會丟失(即使使用EnableClosingDropDownOnSelect屬性) – user2443476

+0

根據以下內容文章,該列表將始終關閉在回發:http://www.infragistics.com/community/forums/t/92484.aspx。除非每次使用'openDropDown'重新打開它(這會導致閃爍效果),否則您可能需要首先在您的其他帖子中實現您正在考慮的客戶端代碼。目前,WebDropDown保持人爲打開狀態,因爲它未包含在部分更新中。 – ConnorsFan

回答

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關閉/打開。

+0

問題在於,我的代碼將在每次更新面板刷新時執行。我希望我的js代碼只有在引發更新面板刷新的dropdown1時纔會執行,而不是用於dropdown2,3或任何其他觸發updatePanel刷新的控件。 – user2443476

+0

你可以在公共事件處理程序中放置一個條件:'if(sender == WebDropDown1){//在這裏運行腳本的東西}'。否則,可以將'WebDropDown1_SelectionChanged'設置爲'WebDropDown1'的事件處理程序,併爲其他WebDropDown控件設置另一個事件處理程序,將一些通用代碼放入實用程序函數中。 – ConnorsFan

+0

對不起,我不確定我是否清楚明白,是否需要將它放在客戶端或服務器端。 – user2443476

相關問題