如何在aspx页面中获得动态控件?

时间:2012-09-03 10:26:06

标签: c# asp.net asp.net-placeholder

我正在为我的公司工作。我遇到了一个问题。因此,我正在展示我打算做什么以及我无法做什么的例子。

在我的aspx页面中,我有按钮和占位符。 e.g。

 <asp:Button ID = "brnClickme" runat = "server" Text = "Click Me"onclick="brnClickme_Click" />
  <asp:PlaceHolder ID = "PH" runat = "server"></asp:PlaceHolder>

在我的aspc.cs文件中我有一个动态控件,比如说一个Label会在单击Button后改变它的值

所以我写了这样的代码

    protected void Page_Init(object sender, EventArgs e)
    {
        Label label = new Label();
        label.Text = "I am in the Place holder";
        PH.Controls.Add(label);
    }
    protected void Page_Load(object sender, EventArgs e)
    {

    }


   protected void brnClickme_Click(object sender, EventArgs e)
    {
        Label label = (Label)FindControl("label");
        label.Text = "After Click I am changed!";
    }

但是在Button click事件中,我找不到Label,所以我无法通过单击更改此动态创建的标签的文本。我知道我犯了一个错误,所以请告诉我我犯了什么错误以及我想做什么。

提前致谢

3 个答案:

答案 0 :(得分:3)

尝试在占位符中找到控件

PH.FindControl("label"); 

您可能希望为标签指定一个ID,以便在创建时更容易找到。

label.ID = "findme";

然后

PH.FindControl("findme"); 

答案 1 :(得分:2)

创建时你没有给{/ 1}} ID ID FindContorlFindControl用来找到该控件的。{/ p>

您还应该将您添加到的容器PH调用protected void Page_Init(object sender, EventArgs e) { Label label = new Label(); label.ID = "myLabel"; label.Text = "I am in the Place holder"; PH.Controls.Add(label); } protected void brnClickme_Click(object sender, EventArgs e) { Label label = (Label)PH.FindControl("myLabel"); label.Text = "After Click I am changed!"; } (例如{{1}}},podiluska answered

{{1}}

答案 2 :(得分:0)

您必须像已经完成的那样在INIT中重新创建动态控件。当您在按钮中搜索LABEL时,请点击尝试拨打templateFormPlaceholder.FindControl

阅读本文。它可能会有所帮助Get text from dynamically created textbox in asp.net