2

これについていくつかのスレッドを見てきました。ページの読み込み時に更新パネルにコントロールがある場合、次のコードで簡単に取得できます。

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

私ができないことは、2つの異なる更新パネルを持つ2つの異なるボタンで次のことです

ボタン 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);

基本的に、ラベルを作成して1つの更新パネルに配置し、2番目のボタンをクリックして別の更新パネルに移動しています。これを試すたびに、次のように表示されます:値をnullにすることはできません。パラメータ名:子

ControlCollection cbb = upPreview.ContentTemplateContainer.Controls; も試しました。

同じエラー。何か案は?

4

1 に答える 1

0

をクリックすると、部分的なポストバックLabel lbl中に失われます。ButtonViewState を使用して、ポストバック中に保持できます。

LabelPage_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 に答える