【问题标题】:add a button click event dynamically in asp.net 4.5 c#在asp.net 4.5 c#中动态添加按钮单击事件
【发布时间】:2013-05-10 02:43:38
【问题描述】:

我对这篇文章 [1] 有一些疑问:How can i create dynamic button click event on dynamic button?

该解决方案对我不起作用,我动态创建了一个按钮,它位于 asp:table 控制器中。

我尝试将动态元素保存在 Session 中,并将 Session 值分配给 Page_Load 中的对象,但这不起作用。

一些想法

编辑:

        ...
        Button button = new Button();
        button.ID = "BtnTag";
        button.Text = "Tag generieren";
        button.Click += button_TagGenerieren;

        tabellenZelle.Controls.Add(button);
        Session["table"] = table;
    }

    public void button_TagGenerieren(object sender, EventArgs e)
    {
        TableRowCollection tabellenZeilen = qvTabelle.Rows;
        for (int i = 0; i < tabellenZeilen.Count; i++)
        {
            ...
        }
    }

  protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {

            if (Session["table"] != null)
            {
                table = (Table) Session["table"];
                Session["table"] = null;
             }
        }
    }

【问题讨论】:

  • 为什么要动态创建它?
  • 我有一个 asp:panel,它显示在“数据集”的详细信息中,并使用事件动态填充数据
  • 我认为你根本不需要使用Session...如果你改变页面的控制结构,它会自动持久化。
  • 搞笑的是,Session分配了正确的数据,但是表面上并没有显示出来
  • stackoverflow.com/q/10387856/875454 这也可能对其他人有所帮助

标签: c# asp.net button dynamic


【解决方案1】:

将每个控件都存储到 Session 状态不是一个好习惯。

我发现的唯一问题是当页面回发到服务器时,您需要重新加载具有相同 ID 的控件。否则,这些控件将为空。

<asp:PlaceHolder runat="server" ID="PlaceHolder1" />
<asp:Label runat="server" ID="Label1"/>

protected void Page_Load(object sender, EventArgs e)
{
    LoadControls();
}

private void LoadControls()
{
    var button = new Button {ID = "BtnTag", Text = "Tag generieren"};
    button.Click += button_Click;
    PlaceHolder1.Controls.Add(button);
}

private void button_Click(object sender, EventArgs e)
{
    Label1.Text = "BtnTag button is clicked";
}

注意:如果您不知道按钮的 id(在运行时动态生成),则希望将这些 id 保存在 ViewState 中,如下所示 - https://stackoverflow.com/a/14449305/296861

【讨论】:

    【解决方案2】:

    问题在于在页面生命周期中创建按钮及其事件的那一刻。为此尝试 page_init 事件。

    【讨论】:

      【解决方案3】:

      在页面加载中创建按钮

                  Button btn = new Button();
                  btn.Text = "Dynamic";
                  btn.Click += new EventHandler(btnClick);
                  PlaceHolder1.Controls.Add(btn)
      

      按钮点击事件

      protected void btnClick(object sender, EventArgs e)
      {
        // Coding to click event
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-01
        • 1970-01-01
        • 2017-11-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多