我在点击按钮时动态创建了Label控件:
protected void createDynamicLabels_Click(object sender, EventArgs e)
{
int n = 5;
for (int i = 0; i < n; i++)
{
Label MyLabel = new Label();
MyLabel.ID = "lb" + i.ToString();
MyLabel.Text = "Labell: " + i.ToString();
MyLabel.Style["Clear"] = "Both";
MyLabel.Style["Float"] = "Left";
MyLabel.Style["margin-left"] = "100px";
Panel1.Controls.Add(MyLabel);
}
}
当我尝试回读另一个按钮时,我看到Label Control返回null
标签str =(标签)Panel1.FindControl(“lb”+ i.ToString());
不确定这里出了什么问题
protected void bReadDynValue_Click(object sender, EventArgs e)
{
int n = 5;
for (int i = 0; i < n; i++)
{
Label str = (Label)Panel1.FindControl("lb" + i.ToString());
lbGetText.Text = str.Text;
}
}
答案 0 :(得分:1)
这是每次页面加载事件的问题。当点击任何按钮时,ASP.net会在每次页面加载事件时触发。
在这个例子中假设..
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
createDynamicLabels();
}
private void createDynamicLabels()
{
int n = 5;
for (int i = 0; i < n; i++)
{
Label MyLabel = new Label();
MyLabel.ID = "lb" + i.ToString();
MyLabel.Text = "Labell: " + i.ToString();
MyLabel.Style["Clear"] = "Both";
MyLabel.Style["Float"] = "Left";
MyLabel.Style["margin-left"] = "100px";
Panel1.Controls.Add(MyLabel);
}
}
protected void bReadDynValue_Click(object sender, EventArgs e)
{
int n = 5;
for (int i = 0; i < n; i++)
{
Label str = (Label)Panel1.FindControl("lb" + i.ToString());
lbGetText.Text = str.Text;
}
}
当按钮触发器页面没有任何标签,因为它是在运行时创建的。和页面没有找到特定的标签。如果您尝试上面的代码,它就可以正常运行。
protected void Page_Load(object sender, EventArgs e)
{
createDynamicLabels();
}
private void createDynamicLabels()
{
int n = 5;
for (int i = 0; i < n; i++)
{
Label MyLabel = new Label();
MyLabel.ID = "lb" + i.ToString();
MyLabel.Text = "Labell: " + i.ToString();
MyLabel.Style["Clear"] = "Both";
MyLabel.Style["Float"] = "Left";
MyLabel.Style["margin-left"] = "100px";
Panel1.Controls.Add(MyLabel);
}
}
protected void bReadDynValue_Click(object sender, EventArgs e)
{
int n = 5;
for (int i = 0; i < n; i++)
{
Label str = (Label)Panel1.FindControl("lb" + i.ToString());
lbGetText.Text = str.Text;
}
}
在此示例代码中每次都找到标签,因为每次它都可以为此页面制作标签。
答案 1 :(得分:0)
动态创建的标签仅在下一次回发发生之前存在。当您单击另一个按钮以检索其值时,会发生回发并且值变为空。
为了在回发后保存标签状态,您必须使用一些隐藏字段。
答案 2 :(得分:0)
如果labes的文本/值没有改变,那么就足以在每次回发时生成它们(如已经提到的mck)。如果您需要检索在客户端进行的更改,您应该在OnInit事件而不是PageLoad中创建控件,并使用输入/ texbox而不是标签。
另一个选项(我建议)是使用asp:Repeater生成标签。