C# 从下拉列表中删除选定项目始终删除顶部的项目
我有两个asp.net页面,将使用C# 从下拉列表中删除选定项目始终删除顶部的项目,c#,asp.net,C#,Asp.net,我有两个asp.net页面,将使用Response.Redirect(“summary.aspx”)从第一个asp.net页面调用summary.aspx Ticket是一个自定义类,具有4个属性(stringname、int-age、int-seat、int-price),它们的getter和setter以及一个ToString方法 Session[“tickets”]存储Ticket类的对象 我的问题是我有一个名为drop\u remove的下拉列表和一个名为btn\u remove的按钮。
Response.Redirect(“summary.aspx”)
从第一个asp.net页面调用summary.aspx
Ticket是一个自定义类,具有4个属性(stringname、int-age、int-seat、int-price
),它们的getter和setter以及一个ToString
方法
Session[“tickets”]
存储Ticket类的对象
我的问题是我有一个名为drop\u remove
的下拉列表和一个名为btn\u remove
的按钮。当我单击按钮时,它将删除所选项目并从列表票据中删除相应的对象。但是,它总是从dropdownlist中删除顶部项目。我是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;
}
}
公共部分类摘要:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
列表票证=(列表)会话[“票证”];
if(会话[“eventName”].ToString()!=null)
{
label_event.Text=会话[“eventName”].ToString();
}
如果(票证!=null)
{
门票;
}
if(会话[“票证”]==null)
{
票证=新列表();
}
其他的
{
票证=(列表)会话[“票证”];
drop_remove.Items.Clear();
foreach(票证中的票证a)
{
drop_remove.Items.Add(a.name.ToString());
}
}
}
受保护的void moreTicekts\u单击(对象发送方,事件参数e)
{
重定向(“default.aspx”);
}
私人票证(列出票证)
{
TextBox1.Text=“”;
System.Text.StringBuilder=新的System.Text.StringBuilder();
builder.Append(Environment.NewLine);
foreach(票证中的票证a)
{
Append(a.ToString()+Environment.NewLine);
}
TextBox1.Text+=builder.ToString();
}
受保护的无效btn\u删除\u单击(对象发送方,事件参数e)
{
列表票证=(列表)会话[“票证”];
对于(int i=0;i
问题在于每次回发时,您都会清除删除
内部页面加载。因此,所选项目已从列表中删除,因为每个项目都将重新创建。然后,默认情况下,顶部项目变为选中项目
正如Wael Abbas所说,如果(!IsPostBack)
,您需要将这些代码放在中
公共部分类摘要:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!IsPostBack)
{
列表票证=(列表)会话[“票证”];
//下面是代码的其余部分
}
}
...
}
可能重复的@Charlie我可以从下拉列表中删除项,但它总是删除最顶端的项,而不是加载页面上的选定项
尝试在中添加代码,如果(!IsPostBack){//your code}
是否附加了调试器以查看SelectedItem返回的内容?不建议在会话中存储列表;它的伸缩性不好。在将其设置为新列表之前,也不需要将其设置为null。
public partial class summary : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List<Ticket> tickets = (List<Ticket>)Session["tickets"];
// the rest of the code here
}
}
...
}