簡體   English   中英

如何將選定的ListItem從ListBox動態復制到DropDownList並使其正確顯示在網頁中

[英]How to dynamically copy selected ListItems from a ListBox to a DropDownList AND have it display correctly in a Webpage

我的問題是背后的代碼看起來像它一樣工作,並且根據調試器,它確實可以(沒有錯誤或異常)。 不幸的是,它實際上無法在我的asp.net Webforms網頁上運行,DropdownList並未實際填充有ListBox的選定項。 這確實應該很簡單,但顯然不是。

我的研究表明,Listboxes和DropDownList應該位於UpdatePanels內部,並且需要將作為觸發器的子級設置為true,並且在ScriptManager的幫助下,它將攔截回發請求並且僅執行部分頁面更新。 但是,當那行不通時,我嘗試直接調用updatepanels.update()方法,但這也不行。

這是我的C#代碼。

  protected void GroupList_SelectedIndexChanged(object sender, EventArgs e)
    {
        updategroupEntry();
    }

    protected void updategroupEntry() 
    {
        EnterAGroup.Items.Clear();
        foreach (ListItem li in GroupList.Items)
        {
            if (li.Selected)
            {
                EnterAGroup.Items.Add(li);
            }
        }
        OptionsUpdater.Update();
        OverallUpdater.Update();
    }

在我的代碼中,我使用嵌套的更新面板,此處顯示了整體/環繞面板,在第二個DropdownList中還包括了該面板的結束標記。 這是第一個代碼段。

<asp:UpdatePanel ID="OverallUpdater" UpdateMode="Conditional" runat="server" ChildrenAsTriggers="true">
       <ContentTemplate>

 //irrelevant code omitted

                <asp:Listbox AutoPostback="True" ID="GroupList" runat="server" Width="166px"  SelectionMode="Multiple" OnSelectedIndexChanged="GroupList_SelectedIndexChanged" DataSourceID="GroupSource" DataTextField="GroupName" DataValueField="GroupID">
                </asp:Listbox>
                <asp:SqlDataSource ID="GroupSource" runat="server"
                     ConnectionString="<%$ ConnectionStrings:ACESConnectionString %>" 
                    SelectCommand="SELECT [GroupName], [GroupID] FROM [PrimaryGroup] ORDER BY [GroupName]"></asp:SqlDataSource>

 //more code omitted

              <%--End of Options Panel --%>
                    </asp:Panel>
                </ContentTemplate>
              </asp:UpdatePanel> 

        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="viewapps" EventName="Click" />
            <asp:AsyncPostBackTrigger ControlID="UpdateButton" EventName="Click" />
            <asp:AsyncPostBackTrigger ControlID="FilterButton" EventName="Click" />
        </Triggers>
    </asp:UpdatePanel>  

在我的aspx頁面中,我的DropDownList周圍有這段代碼。

    <asp:UpdatePanel ID="OptionsUpdater" UpdateMode="Conditional" runat="server"  ChildrenAsTriggers="true" ViewStateMode="Enabled"> 
       <ContentTemplate>

  //other code omitted for brevity.

          <asp:TableCell>
             <asp:DropDownList runat="server" ID="EnterAGroup" BackColor="PaleVioletRed" AutoPostBack="true"></asp:DropDownList>
          </asp:TableCell>

 //other code omitted for brevity.

    </ContentTemplate>
 </asp:UpdatePanel> 

因此,后面的代碼說明了它的工作原理,但是它並未在網頁上進行更新。 我如何使其正常工作?

我將很高興根據要求提供更多代碼。 另外,如果您需要測試代碼,建議您用表中的2列替換您自己的SqlDataSource。

更新我嘗試了Cherian M Paul的想法,並產生了奇怪的結果,當我從組中選擇所有項目時,只有一半成功,但只有一半成功。

選擇所有組后,工作就完成了。

選擇所有組時中途工作

這是當僅選擇一些圖像時它不起作用的圖像。 僅選擇一些時不起作用

更新

經過進一步調查后,發現存在斷開連接的情況,並且在網頁上的單擊不再達到隱藏的代碼。

我有一段有關斷開連接的視頻。 基本上,最后沒有點擊次數會觸發我背后的代碼中的事件。

https://docs.google.com/file/d/0B12ZVcp_VQ_xR3c0cU1LaXd5Vkk/edit?usp=sharing

我相信,您需要為ID為OptionsUpdater的第二個UpdatePanel添加觸發器。 與您為第一個做的方式類似。

<asp:AsyncPostBackTrigger ControlID="GroupList" EventName="GroupList_SelectedIndexChanged" />

請嘗試更新html。 同樣也沒有部分更新,雖然也使用了更新面板,但是asp.net實際上完成了所有工作,但是頁面的僅一部分被更新了,用戶覺得它在后端做某事。

我可以建議您使用jQuery完成這類任務。

foreach (ListItem li in GroupList.Items)
{
    if (li.Selected)
    {
        EnterAGroup.Items.Add(li);
    }
}

上面的代碼不起作用,因為dropdownlist不能有多個選定項。 請按以下所示更改代碼,然后它將起作用。

foreach (ListItem li in GroupList.Items)
{
    if (li.Selected)
    {
        EnterAGroup.Items.Add(new ListItem(li.Text, li.Value));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM