0

マルチビュー コントロールを使用しようとしています。最初にいくつかのビューを作成し、それらに preinit イベントでいくつかのラベルを追加します。(!isPostBack) シナリオでそれらをマルチビューに追加します。「次へ」ボタンと「前へ」ボタンを使用してビュー間を移動したい。これは私がやったことです:

protected void Page_PreInit(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        MultiView1 = (MultiView)Session["multi"];            
    }
    else
    {
        View view1 = new View();
        View view2 = new View();
        View view3 = new View();
        Label l1 = new Label(); l1.Text = "1";
        Label l2 = new Label(); l2.Text = "2";
        Label l3 = new Label(); l3.Text = "3";
        view1.Controls.Add(l1);
        view2.Controls.Add(l2);
        view3.Controls.Add(l3);
        MultiView1.Views.Add(view1);
        MultiView1.Views.Add(view2);
        MultiView1.Views.Add(view3);
        MultiView1.ActiveViewIndex = 0;
        Session["multi"] = MultiView1;
    }
}    
protected void Page_Load(object sender, EventArgs e)
{        
}
protected void Button2_Click(object sender, EventArgs e)
{
    MultiView1.ActiveViewIndex++;
}
protected void Button1_Click(object sender, EventArgs e)
{
    MultiView1.ActiveViewIndex--;
}

これは、マルチビューがコンテンツを保存せず、activeviewindex を 0 より大きい値に変更できないように機能しません。activeviewindex を変更できるように変更するにはどうすればよいですか?

4

1 に答える 1

1

毎回すべての動的コントロールを再作成する必要があります。コードを次のように変更すると、ボタンが機能するはずです。

    protected override void  OnInit(EventArgs e)
    {
        View view1 = new View();
        View view2 = new View();
        View view3 = new View();
        Label l1 = new Label();
        Label l2 = new Label();
        Label l3 = new Label();

        l1.Text = "1";
        l2.Text = "2";
        l3.Text = "3";

        view1.Controls.Add(l1);
        view2.Controls.Add(l2);
        view3.Controls.Add(l3);
        MultiView1.Views.Add(view1);
        MultiView1.Views.Add(view2);
        MultiView1.Views.Add(view3);
        MultiView1.ActiveViewIndex = 0;

        base.OnInit();
    }


    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected void Button2_Click(object sender, EventArgs e)
    {
        MultiView1.ActiveViewIndex++;
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        MultiView1.ActiveViewIndex--;
    }

何らかの理由で MultiView がまだ Pre_Init で初期化されていないため、コードを OnInit に移動しました。

于 2011-06-09T13:08:36.143 に答える