【问题标题】:Remove From List After One Postback一次回发后从列表中删除
【发布时间】:2012-05-26 09:14:56
【问题描述】:

我创建了一个Listbox 的食物(苹果、香蕉等),并在页面上运行了一个Javascript,它将列表中的选定项目添加到ArrayList 并作为一个按钮。该按钮的功能是,当您单击它时,该项目将从ArrayList 中删除,并且该按钮也将被删除(在回发之后)。

当我运行此代码时,它会将项目添加到列表中并按预期创建按钮。但是,当我单击该按钮时,它不会从列表中删除该项目,直到页面第二次重新加载。

我怎样才能拥有它以便在单击和第一次回发之后而不是在两次回发之后从ArrayList 中删除该项目?

static private ArrayList myAL { set; get; }

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
        myAL = new ArrayList();

    Report1();

    Label1.Text = myAL.Count.ToString();
}

private void Report1()
{
    String FullFilter = ""; int FilterCount = 0;

    if (Request.Params["ListBox1Hidden"] != null && (string)Request.Params["ListBox1Hidden"] == "doubleclicked")
        myAL.Add(lstBox.SelectedItem.Text);

    myAL.Remove(Session["RemoveButton"].ToString());
    foreach (Object obj in myAL)
    {
        FilterCount++;
        if (FilterCount > 1)
            FullFilter += ", ";

        FullFilter += String.Format("'{0}'", obj);

        Button button = new Button();
        button.Text = obj.ToString();
        button.ID = "Dist" + obj.ToString();
        button.Click += new EventHandler(ButtonClickOneEvent);
        PlaceHolder1.Controls.Add(button);
    }

    Label1.Text += FullFilter;
}

void ButtonClickOneEvent(object sender, EventArgs e)
{
    Button button = sender as Button;
    myAL.Remove(button.Text);
}

【问题讨论】:

  • 您是否有理由需要使用 ArrayList?除非您有真正令人信服的理由不这样做,否则您应该始终使用强类型的通用数据结构。
  • 请不要在标题前加上“ASP.NET C# -”等。这就是标签的用途。
  • 另外,您是否意识到static 字段在应用程序的所有用户之间共享?这可能不是您的想法:如果一个用户删除了一个列表项,下一个用户将看到该项目已被删除。

标签: c# asp.net button dynamic arraylist


【解决方案1】:

您可以在视图状态中保存一个值,指示第一个回发已被处理。在这种情况下,这可能是最直接的方法,无需处理其他处理静态值的方法。

【讨论】:

  • 我只是尝试实现这一点,但最终 ViewState 值仍然只显示在第二次按钮单击或刷新后的标签中。
  • 你把 viewstate 调用放在哪里了? page_load 将在按钮事件之前触发。您可能希望将视图状态管理放在 PreRender 事件中,因为它将在页面事件之前触发。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-12
  • 2012-08-02
  • 2017-02-21
  • 1970-01-01
相关资源
最近更新 更多