我有一个列表框控件:
背后的代码类似于:
private void Page_Load(object sender, System.EventArgs e)
{
lbox.SelectedIndexChanged+=new EventHandler(lbox_SelectedIndexChanged);
if(!Page.IsPostBack)
{
LoadData();
}
}
private LoadData()
{
lbox.DataSource = foo();
lbox.DataBind();
}
protected void lboxScorecard_SelectedIndexChanged(object sender, EventArgs e)
{
int index = (sender as ListBox).selectedIndex;
}
我的问题是,当我的页面收到回发帖子时(当用户在列表框中进行选择时),选择总是"跳转"到列表框中的第一个项目,因此我的回调函数中的索引变量始终为0.
这似乎可能是一个viewstate问题?如何修复它以便选择索引保留在回发中?
没有ajax,这是.NET 1.0.
谢谢.
编辑1 JohnIdol让我更近了一步,如果我将数据源从我原来的DataTable切换到ArrayList,那么一切正常......会导致什么?
编辑2事实证明我的DataTable有多个相同的值,因此索引被视为具有相同值的所有项目相同...感谢那些帮助过的人!
这里真正的问题是事件的顺序.当您在page_load中进行数据绑定时,会覆盖已发布的数据,这就是为什么未在列表框中设置选择的原因.您可以通过将绑定逻辑移动到Page_Init来轻松克服此问题.