[英]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.