如何在ASP.NET中获取列表框的选择项?

问题描述 投票:1回答:1

我使用列表框以字符串的形式查看数据库中的一些记录,但我有两个问题。

  1. 双击或单击都不会调用选择变化,只有当你选择一个项目并按下回车键时才会调用。
  2. 即使选择改变被调用,selectedIndex返回-1,选择的值为空。

ASP代码。

<form runat="server">
    <div class="clearfix">
        <asp:ListBox runat="server" ID="g1SeasonsListView" CssClass="adminSeasonsListView"  OnSelectedIndexChanged="g1SeasonsListView_SelectedIndexChanged" />
        <asp:ListBox runat="server" ID="g2SeasonsListView" CssClass="adminSeasonsListView" />
        <asp:ListBox runat="server" ID="g3SeasonsListView" CssClass="adminSeasonsListView" />
    </div>
    <div class="clearfix">
        <asp:Button ID="g1DeleteBtn" Text="Delete" runat="server" OnClick="g1DeleteBtn_Click" CssClass="adminDeleteBtn" />
        <asp:Button ID="g2DeleteBtn" Text="Delete" runat="server" OnClick="g2DeleteBtn_Click" CssClass="adminDeleteBtn" />
        <asp:Button ID="g3DeleteBtn" Text="Delete" runat="server" OnClick="g3DeleteBtn_Click" CssClass="adminDeleteBtn" />
    </div>
</form>

CS代码,我在VS2013中通过观察窗口检查过,里面没有什么特别的地方。

protected void g1DeleteBtn_Click(object sender, EventArgs e)
{    
}
protected void g2DeleteBtn_Click(object sender, EventArgs e)
{
}
protected void g3DeleteBtn_Click(object sender, EventArgs e)
{    
}
protected void g1SeasonsListView_SelectedIndexChanged(object sender, EventArgs e)
{    
}

当我想更新列表框时,我使用这段代码。

private void UpdateListeView()
{
    List<string> seasonsListTemp = null;

    g1SeasonsListView.Items.Clear();
    seasonsListTemp = (from s in database.Gs where s.grade == 1 select s.season).ToList();
    for (int i = 0; i < seasonsListTemp.Count; i++)
        g1SeasonsListView.Items.Add(seasonsListTemp[i]);

    g2SeasonsListView.Items.Clear();
    seasonsListTemp = (from s in database.Gs where s.grade == 2 select s.season).ToList();
    for (int i = 0; i < seasonsListTemp.Count; i++)
        g2SeasonsListView.Items.Add(seasonsListTemp[i]);

    g3SeasonsListView.Items.Clear();
    seasonsListTemp = (from s in database.Gs where s.grade == 3 select s.season).ToList();
    for (int i = 0; i < seasonsListTemp.Count; i++)
        g3SeasonsListView.Items.Add(seasonsListTemp[i]);
}

我甚至尝试在按下删除按钮时获取所选索引,但结果都是一样的。

c# asp.net listbox
1个回答
0
投票

绑定你的代码在一个 !Page.IsPostBack 块。这将确保代码不会在postback上执行。如果你在PostBack上绑定了ListView,你将失去GridView的状态,包括被触发的事件,SelectedIndex等。

Page.IsPostBack属性

获取一个值,该值表示页面是第一次渲染还是响应postback而加载。

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

通常控件是在Page_Load方法中绑定的,你可能需要在那里检查Page.IsPostBack。

© www.soinside.com 2019 - 2024. All rights reserved.