2

我已经看到了一些关于此的主题。如果页面加载时我在更新面板中有一个控件,我可以使用以下代码轻松获取它:

    Label lbls = (Label)upPreview.FindControl(lbl.ID);
    lbls.Text = lbl.ID;

我不能做的是在两个不同的按钮上有两个不同的更新面板

按钮 1:

    Label lbl = new Label();
    lbl.Text = "something";
    lbl.ID = "something";
    upPreview.ContentTemplateContainer.Controls.Add(lbl);

按钮 2

    Label lbls = (Label)upPreview.FindControl(lbl.ID);
    lbls.Text = lbl.ID;
    upForm.ContentTemplateContainer.Controls.Add(lbls);

本质上,我正在创建一个标签并将其放在一个更新面板中,然后在第二个按钮上单击我将其移动到另一个更新面板。每次我尝试这个时,它都会说:值不能为空。参数名称:孩子

我也试过 ControlCollection cbb = upPreview.ContentTemplateContainer.Controls;

同样的错误。有任何想法吗?

4

1 回答 1

0

当单击 s时,您Label lbl在部分回发期间迷路了。Button您可以使用 ViewState 在回发期间保留它。

Label在您的 Page_Load 上方添加一个并将其实例化为 null。

protected Label lbl = null;

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack) // First load or reload of the page
    {
        lbl = new Label();
        lbl.Text = "something";
        lbl.ID = "something";
        upPreview.ContentTemplateContainer.Controls.Add(lbl);        
    }
    else
    {
        // Reinitialize the lbl to what is stored in the view state
        if (ViewState["Label"] != null)
            lbl = (Label)ViewState["Label"];
        else
            lbl = null;
    }
}

然后在您的 Button_Click 事件中:

protected void Button1_Click(object sender, EventArgs e)
{
    // Save the lbl in the ViewState before proceeding.
    ViewState["Label"] = lbl;
}

protected void Button2_Click(object sender, EventArgs e)
{
    if (lbl != null)
    {
        // Retreive the lbl from the view state and add it to the other update panel
        upForm.ContentTemplateContainer.Controls.Add(lbl);        
    }
    else
    {
        lbl = new Label();
        lbl.Text = "Error: the label was null in the ViewState.";
    }
}

通过这种方式,您可以在回发期间对其进行跟踪。

于 2013-03-27T02:49:41.807 回答