如何获取ASP.NET中列表框的选中项?
How to get the selected item of a listbox in ASP.NET?
我使用列表框以字符串的形式查看数据库中的某些记录,但我遇到了两个问题:
- select离子更改不会通过双击或单击调用,它仅在您 select 一个项目并按 return 时调用。
- 即使调用 selection changed,selectedIndex returns -1 和 selected 值为空。
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中通过watchwindow检查过;没什么特别的:
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]);
}
我什至试图在按下删除按钮时获取 selected 索引,但结果是一样的。
在 !Page.IsPostBack
块中绑定您的代码。这将确保代码不会在回发时执行。如果您在 PostBack 上绑定 ListView,您将失去 GridView 的状态,包括被触发的事件、SelectedIndex 等。
Gets a value that indicates whether the page is being rendered for the
first time or is being loaded in response to a postback.
if(!Page.IsPostBack)
{
UpdateListeView();
}
通常控件绑定在 Page_Load 方法中,您可能需要在那里检查 Page.IsPostBack。
我使用列表框以字符串的形式查看数据库中的某些记录,但我遇到了两个问题:
- select离子更改不会通过双击或单击调用,它仅在您 select 一个项目并按 return 时调用。
- 即使调用 selection changed,selectedIndex returns -1 和 selected 值为空。
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中通过watchwindow检查过;没什么特别的:
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]);
}
我什至试图在按下删除按钮时获取 selected 索引,但结果是一样的。
在 !Page.IsPostBack
块中绑定您的代码。这将确保代码不会在回发时执行。如果您在 PostBack 上绑定 ListView,您将失去 GridView 的状态,包括被触发的事件、SelectedIndex 等。
Gets a value that indicates whether the page is being rendered for the first time or is being loaded in response to a postback.
if(!Page.IsPostBack)
{
UpdateListeView();
}
通常控件绑定在 Page_Load 方法中,您可能需要在那里检查 Page.IsPostBack。