我正在为我的公司做一个项目。在那里我遇到了一个问题。因此,我展示了一个我打算做什么和不能做什么的例子
在我的aspx页面中,我有按钮和占位符。例如
<asp:Button ID = "brnClickme" runat = "server" Text = "Click Me"onclick="brnClickme_Click" />
<asp:PlaceHolder ID = "PH" runat = "server"></asp:PlaceHolder>
在我的aspc.cs文件中,我有一个动态控件,比如一个标签,它将在点击按钮后更改其值
所以我写了这样的代码
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!";
}
但是在按钮点击事件中,我找不到标签,所以我无法通过点击来更改这个动态创建的标签的文本。我知道我犯了一个错误,所以请告诉我我犯了什么错误,我该怎么办
提前感谢
尝试在占位符中查找控件
PH.FindControl("label");
你可能想给标签一个ID,这样在创建标签时更容易找到
label.ID = "findme";
然后
PH.FindControl("findme");
创建控件时,您没有给控件一个ID
-这个ID
是FindContorl
用来查找该控件的。
您还应该在添加到的容器上调用FindControl
(在您的案例中为PH
),正如podilska所回答的那样。
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!";
}
您必须像已经做的那样在INIT中重新创建动态控件。当您在按钮中搜索LABEL时,单击尝试调用templateFormPlaceholder.FindControl
。
读这个。它可能有助于从asp.net 中动态创建的文本框中获取文本