【发布时间】:2018-04-06 02:26:56
【问题描述】:
我有两个 asp.net 页面,summary.aspx 将使用 Response.Redirect("summary.aspx") 从第一个 asp.net 页面调用。
Ticket 是一个自定义类,具有 4 个属性 (String name, int age, int seat, int price)、它们的 getter 和 setter 以及一个 ToString 方法。
Session["tickets"]存放Ticket类的对象
我的问题是我有一个名为drop_remove 的下拉列表和一个名为btn_remove 的按钮。当我单击按钮时,它应该删除选定的项目并从List<Ticket> tickets 中删除相应的对象。但是,它总是从下拉列表中删除最上面的项目。我是asp.net的新手,请帮忙。
public partial class summary : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<Ticket> tickets = (List<Ticket>)Session["tickets"];
if (Session["eventName"].ToString() != null)
{
label_event.Text = Session["eventName"].ToString();
}
if (tickets != null)
{
displayTickets(tickets);
}
if (Session["tickets"] == null)
{
tickets = new List<Ticket>();
}
else
{
tickets = (List<Ticket>)Session["tickets"];
drop_remove.Items.Clear();
foreach (Ticket a in tickets)
{
drop_remove.Items.Add(a.name.ToString());
}
}
}
protected void moreTicekts_Click(object sender, EventArgs e)
{
Response.Redirect("default.aspx");
}
private void displayTickets(List<Ticket> tickets)
{
TextBox1.Text = "";
System.Text.StringBuilder builder = new System.Text.StringBuilder();
builder.Append(Environment.NewLine);
foreach (Ticket a in tickets)
{
builder.Append(a.ToString() + Environment.NewLine);
}
TextBox1.Text += builder.ToString();
}
protected void btn_remove_Click(object sender, EventArgs e)
{
List<Ticket> tickets = (List<Ticket>)Session["tickets"];
for (int i = 0; i < tickets.Count; i++)
{
if (tickets[i].name.Equals(drop_remove.SelectedItem.ToString()))
{
drop_remove.Items.Remove(drop_remove.SelectedItem);
tickets.RemoveAt(i);
break;
}
}
Session["tickets"] = null;
Session["tickets"] = tickets;
}
}
【问题讨论】:
-
@Charlie 我可以从下拉列表中删除项目,但它总是删除最顶部的项目而不是选定的项目
-
在
Page_Load上尝试在if (!IsPostBack) { // Your code }中添加您的代码 -
您是否附加了调试器以查看 SelectedItem 返回的内容?不建议在 Session 中存储列表;它不会很好地扩展。在将其设置为新列表之前,您也无需将其设置为 null。