![](/img/trans.png)
[英]ASP.NET C# Two DropDown Lists with postback keep messing up each other's Index
[英]ASP.NET populate lists referencing each other on selected index change
我有一个带有三个列表框的ASP.NET控件: LBParent
, LBChild1
和LBChild2
。
LBParent
必须以编程方式填充。 我在Page_Load
执行此操作。
当用户在LBParent
选择一个值时,我想以编程方式用一些数据填充LBChild1
和LBChild2
。 子级列表还必须跟踪其选定的值。
基本上,父列表是用户列表,第一个列表是用户拥有的权限列表,第二个列表是用户没有的权限列表。
我的计划是添加两个按钮在两个列表之间移动权限。
不幸的是,我无法使它正常工作。
如果我在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。 所以:
因此,在重建列表(在Onload中)之前,我将尝试保存current-selected-index。
如果稍后在同一“回发”中还原它,则可以将其保存在一个简单变量中。 无需存储在Viewstate或Session中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.