C# ASP.NET填充在选定索引更改时相互引用的列表
我有一个ASP.NET控件,它有三个列表框:C# ASP.NET填充在选定索引更改时相互引用的列表,c#,asp.net,listbox,postback,autopostback,C#,Asp.net,Listbox,Postback,Autopostback,我有一个ASP.NET控件,它有三个列表框:LBParent、LBChild1和LBChild2 LBParent必须以编程方式填充。我在页面加载中执行此操作 当用户在LBParent中选择一个值时,我希望以编程方式用一些数据填充LBChild1和LBChild2。子列表还必须跟踪其选定的值 基本上,父列表是一个用户列表,第一个列表是用户拥有的权限列表,第二个列表是用户没有的权限列表 我的计划是添加两个按钮,在两个列表之间移动权限 不幸的是,我无法让它正常工作 如果我在页面加载中填充父列表,则
LBParent
、LBChild1
和LBChild2
LBParent
必须以编程方式填充。我在页面加载中执行此操作
当用户在LBParent
中选择一个值时,我希望以编程方式用一些数据填充LBChild1
和LBChild2
。子列表还必须跟踪其选定的值
基本上,父列表是一个用户列表,第一个列表是用户拥有的权限列表,第二个列表是用户没有的权限列表
我的计划是添加两个按钮,在两个列表之间移动权限
不幸的是,我无法让它正常工作
- 如果我在
页面加载
中填充父列表,则所选索引似乎会重置。我使用ViewState
保存索引。。。但这似乎需要额外的刷新,因为回发后它不会更新。这是不能接受的
- 如果我在
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>
像这样使用
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(...);
}
如果您在同一页面上,则可以使用ViewState
/隐藏字段
维护国家
第一次在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激发。
因此:
用户单击所选内容
将触发回发
在服务器上,Onload触发(并重建列表)
OnSelectedIndexChanged激发(现在已丢失选择)
因此,在重建列表(在Onload中)之前,我会尝试保存当前选定的索引
如果稍后在相同的“回发”中恢复它,则可以将其保存在一个简单变量中。无需存储在Viewstate或会话中。我使用Viewstate保存索引。。。但这似乎需要额外的刷新
how??你能帮我发一下密码吗this@Ganesh_Devlekar:基本上,在SelectedIndex上,更改了事件,如OnParentSIC
I只调用了ViewState[“parentIdx”]=LBParent.SelectedIndex代码>。当触发此事件时,它会在填充列表后发生,因此需要额外的页面刷新。如果我将列表填充代码放入Page\u LoadComplete
,则事件根本不会触发。请粘贴您尝试的所有代码。如果我这样做,所有列表在回发时都会被清除。这些项目没有维护。@VittorioRomeo请发布您的全部代码,最好找到问题所在