如何以编程方式在webForm asp.net中添加多个项目

时间:2014-09-17 11:59:31

标签: c# asp.net

我尝试以编程方式在webForm中添加项目(如label,table,...)。我尝试创建一个事件点击按钮,每次点击添加标签。但每次都停在一个标签上,然后下次点击没有任何反应。

这是我的代码,适合那些想看看我尝试过的人:

protected void btn_Valid_Click(object sender, EventArgs e)
    {
               this.Page.Form.Controls.Add(new Label() { Text = "test" });
    }

我们可以在asp.net中执行此操作,还是应该使用其他语言(如javascript)?

2 个答案:

答案 0 :(得分:3)

它只创建一个Label,因为在PostBack期间丢失了一个Label。 在您的点击事件中,您必须增加标签(和/或其他控件)的计数器,并在Page_Init中重新创建。每次和每次页面回发。记住ViewState中的计数器。 像往常一样,我推荐这篇关于ASP.NET Page Life Cycle

的文章

答案 1 :(得分:-1)

对于那些想要真正回答这一步的人来说,按照这一步,它对我有用:

  1. 在Page_Init或Page_Load中进行创建(而非instanciation),因为对于每个事件调用这些方法,
  2. 对于上面的例子,不要做this.Page.Forms.Controls.Add(lbl_test)种类,尝试找到另一种方法,比如存储那些标签的数据(例如在字符串数组中)。这是代码示例:
  3. protected void btn_test_Click(object sender, EventArgs e) { tabLabel[count_tabLabel] = "hello world"; // Do the if(IsCallBack) {} for avoid having your first label skipped count_tabLabel++; }

    1. 在Page_Load()函数(基本上以.cs编写)或通过创建下面的函数,执行循环以将这些标签添加到webForm中,如下所示:
    2. protected void Page_Init(object sender, EventArgs e) { for (int i = 0; i < cpt_l; i++) { Page.Form.Controls.Add(tabLabel[count_tabLabel]); } }

      实际上页面是自动重新加载的,即asp页面循环寿命。因此,您需要在webForm上的每次修改时重新加载所有项目,如标签或更复杂的东西。

      希望它有所帮助!

      P.S。: