簡體   English   中英

ASP.NET填充在選定索引更改時互相引用的列表

[英]ASP.NET populate lists referencing each other on selected index change

我有一個帶有三個列表框的ASP.NET控件: LBParentLBChild1LBChild2

LBParent必須以編程方式填充。 我在Page_Load執行此操作。

當用戶在LBParent選擇一個值時,我想以編程方式用一些數據填充LBChild1LBChild2 子級列表還必須跟蹤其選定的值。

基本上,父列表是用戶列表,第一個列表是用戶擁有的權限列表,第二個列表是用戶沒有的權限列表。

我的計划是添加兩個按鈕在兩個列表之間移動權限。

不幸的是,我無法使它正常工作。

  • 如果我在Page_Load填充父級列表,則所選索引似乎會重置。 我使用ViewState保存索引...但是這似乎需要額外的刷新,因為它在PostBack之后不會更新。 這是不可接受的。

  • 如果我在OnParentSIC事件上填充子級列表框,則無法跟蹤它們的選定索引。 OnChildXSIC事件永遠不會觸發,因為列表框“很快就會”被填充。 (?)

如何使它按預期工作? 也許有更好的解決方案,但是我真的很想了解如何使該解決方案生效,因為目前還看不到可行的解決方案。


Control.ascx

<%@ Control Language="C#" AutoEventWireup="true" EnableViewState="True" CodeBehind="..." Inherits="..." %>
<form runat="server">
     <asp:ListBox ID="LBParent" runat="server" CssClass="form-control" 
                  AutoPostBack="true" OnSelectedIndexChanged="OnParentSIC" />                               
     <asp:ListBox ID="LBChild1" runat="server" CssClass="form-control" 
                  AutoPostBack="true" OnSelectedIndexChanged="OnChild1SIC" />                               
     <asp:ListBox ID="LBChild2" runat="server" CssClass="form-control" 
                  AutoPostBack="true" OnSelectedIndexChanged="OnChild2SIC" />
</form>

Control.ascx.cs

protected void Page_Load(object sender, EventArgs e)
{
    // Populate parent
    for(...) LBParent.Items.Add(...);
}

使用像這樣

如果您在同一頁面上,則可以使用ViewState / Hidden Fields維護狀態

第一次在PageLoad上添加ListItem像這樣使用

protected void Page_Load(object sender, EventArgs e)
{

if(!Page.IsPostBack)
{
   AddListItems();
}
}

Protected Void AddListItems()
{
 // Populate parent
    for(...) LBParent.Items.Add(...);
    for(...) SecondList.Items.Add(...);
    for(...) ThirdList.Items.Add(...);
}

觸發Onchange事件,但在此之前觸發OnLoad。 所以:

  1. 用戶單擊一個選擇
  2. 觸發回發
  3. 在服務器上,Onload觸發(並重建列表)
  4. 觸發OnSelectedIndexChanged(目前丟失選擇)

因此,在重建列表(在Onload中)之前,我將嘗試保存current-selected-index。

如果稍后在同一“回發”中還原它,則可以將其保存在一個簡單變量中。 無需存儲在Viewstate或Session中。

暫無
暫無

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

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