在webforms中向面板添加多个控件

J.B*_*.B. 1 c# asp.net

我希望能够向面板添加多个标签控件并在onlick事件中显示它们.我的代码第一次做了我想要的,然后在第二个onlick事件上用新标签替换标签,依此类推.

这是我到目前为止:

 private void createTaskLabel(Guid GoalID, string Goal)
 { 
     Label taskLabel = new Label();
     taskLabel.ID = GoalID.ToString();
     taskLabel.Text = Goal.ToString();
     TaskPanel.Controls.Add(taskLabel);
 }
Run Code Online (Sandbox Code Playgroud)

因此,例如,这会创建一个带有唯一ID的新标签(在别处处理)并将其放置在面板中并显示它.当onlick再次触发时,只需更换相同的标签,而不是在其下方出现的新标签.

Jam*_*rgy 5

回发后不会保留动态创建的控件.您需要跟踪已生成的控件数量,并且每次都要重新生成所有这些控件,以便按照您的需要进行操作.基本实施:

List<string> LabeIDList = new List<string>();

override SaveViewState(..)
{
    if (LabelIDList.Count>0) {
      ViewState["LabelDIList"]=LabelIDList;
    }
    base.SaveViewState(..)
}
override LoadViewState()
{
    base.LoadViewState();
    if (ViewState["LabelIDList"]!=null) {
        LabelIDList = (List<string>)ViewState["LabelIDList"];
    }
}
override void OnLoad(..) 
{
    foreach (string id in LabelIDList)
    {
        // Make a function essentially like your code in createTaskLabel,
        // you can use it there too
        RecreateControl(id);
    }
}

private void createTaskLabel(Guid GoalID, string Goal)
{ 
    ...
    // save the ID you just created
    LabelIDList.Add(taskLabel.ID);
}
Run Code Online (Sandbox Code Playgroud)

我刚刚意识到这些是你正在创建的标签 - 所以实际上你应该跟踪TextID而不是ID.如果实际ID由于某种原因很重要,那么跟踪它们两者,使用一个List<Tuple<string,string>>.更典型的情况是创建输入控件,但在这种情况下,只要您在OnLoad上或之前重新创建数据,ASP.NET就会保留用户输入的数据(假设启用了ViewState).