【问题标题】:how to create an asp button dynamically and add event to it如何动态创建一个asp按钮并向其添加事件
【发布时间】:2012-07-08 18:17:57
【问题描述】:

我正在尝试在 asp.net 上动态创建一个按钮,但我无法向其中添加事件。下面有什么问题或缺失?

提前致谢

$

    Button btn2 = new Button();
    btn2.ID = "btnEdit";
    btn2.Text = "Edit Member";
    btn2.Click += new EventHandler(btnEdit_Click);
    form1.Controls.Add(btn2);

我也试过这样:

$

    Button btn2 = new Button();
    btn2.ID = "btnEdit";
    btn2.Text = "Edit Member";
    btn2.Attributes.Add("OnClick","btnEdit_Click);
    form1.Controls.Add(btn2);

【问题讨论】:

  • 你有异常还是什么?您在哪里创建按钮,是否在 page_init/page_load 的回发中重新创建它?
  • 该按钮是在 DropDownList 中的 SelectedItem 更改时创建的。创建按钮并将其添加到表单中没有错误。我在页面上获得了我想要的 css 按钮。但是,当我点击它时,没有任何动作,当我在 void "btnEdit_Click" 上设置断点时,它没有命中...

标签: asp.net events c#-4.0 button


【解决方案1】:

阅读有关 asp.net webforms 生命周期的文章http://msdn.microsoft.com/en-us/library/ms178472.aspx。每次加载页面时都必须创建/重新创建控件(例如 OnLoad-Method)

http://www.asp.net/web-forms/videos/aspnet-ajax/how-to-dynamically-add-controls-to-a-web-page

【讨论】:

    【解决方案2】:

    我认为您试图在这里混合服务器端和客户端事件。

    html 属性OnClick 是客户端,当用户点击按钮时,它会触发一段 JavaScript 服务器事件OnClick 在用户单击按钮并将其回发到服务器时发生,这允许您将功能(服务器端)挂钩到该事件中。

    您是在寻找服务器端还是客户端?

    要添加客户端事件,您可以这样做

    btn2.Attributes.Add("onclick","my_javascript_function");
    

    要添加服务器端事件,您可以这样做

    btn2.Click += new System.EventHandler(this.MyMethod); 
    

    其中 this.MyMethod 是一个已经设置为处理服务器端按钮单击的方法。

    【讨论】:

    • 我正在寻找服务器端点击事件。一个 asp 按钮的属性为“OnClientClick”,用于客户端事件...
    【解决方案3】:

    如果我是对的,您可以在 Page_Load 中创建按钮。

    如果是检查回发。

    if(!postback)
    {
       create your buttons.
    }
    

    【讨论】:

    • 伙计们,我在创建按钮并使其在页面上稳定时没有问题。我的按钮仅在下拉列表中选择项目时出现一次。问题是我不能t 将 .cs 文件中的事件注册到按钮。注意我的按钮是一个 asp:button,所以“OnClick”属性不适用于客户端...
    【解决方案4】:

    创建一个添加所有动态控件的方法,如下所示

    public void AddControls()
    {
        Button btn2 = new Button();
        btn2.ID = "btnEdit";
        btn2.Text = "Edit Member";
        btn2.Click += new EventHandler(btnEdit_Click);
        form1.Controls.Add(btn2);
    }
    

    然后在 IsPostBack 块之外的 Page_Load() 事件中调用该方法,如下所示

    protected void Page_Load(object sender, EventArgs e)
    {
    
        if (!IsPostBack)
        {
    
        }
        AddControls();
    }
    

    因为动态添加的控件的视图状态不会在 Page_Load() evnt 之前加载。通过此链接了解更多信息http://msdn.microsoft.com/en-us/library/vstudio/hbdfdyh7(v=vs.100).aspx

    【讨论】:

      【解决方案5】:

      这应该可以解决问题:

      protected void Page_Load(object sender, EventArgs e)
      {
          Button b = new Button() { ID = "btnEdit", Text = "Edit Member" };
          b.Click += (sd, ev) => {
              // Do whatever you want to be done on click here.
              Button me = (Button)sd; // This creates a self-reference to this button, so you can get info like button ID, caption... and use, like this:
              me.Text = "Yay! You clicked me!";
          };
          form1.Controls.Add(b);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-24
        • 1970-01-01
        • 2013-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多