0

我正在为我的公司工作一个项目。在那里我遇到了一个问题。因此,我展示了一个我打算做什么和我不能做什么的例子。

在我的 aspx 页面中,我有按钮和占位符。例如

 <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!";
    }

但是在按钮单击事件中,我没有找到标签,因此我无法通过单击更改此动态创建的标签的文本。我知道我犯了一个错误,所以请告诉我我犯了什么错误以及我应该做什么。

提前致谢

4

3 回答 3

3

尝试在占位符中找到控件

PH.FindControl("label"); 

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

label.ID = "findme";

然后

PH.FindControl("findme"); 
于 2012-09-03T10:27:55.577 回答
2

创建控件时,您还没有给ID它一个控件 - 这IDFindContorl为了找到该控件而使用的。

正如podiluska回答的那样,您还应该调用FindControl您添加到的容器(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!";
}
于 2012-09-03T10:28:03.937 回答
0

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

读这个。它可能有助于从 asp.net 中动态创建的文本框中获取文本

于 2012-09-03T10:33:12.947 回答