突發起想,動態載入「控制項」並「保留狀態」

  • 4297
  • 0

摘要:突發起想,動態載入「控制項」並「保留狀態」

之前研究出來的作法是

    protected void Page_Init(object sender, EventArgs e)
    {  
        if (Session["i"] == null)
        {
            Session["i"] = 1;
        }

        Control control = null;
        string ctrlname = Page.Request.Params["__EVENTTARGET"];
        if (ctrlname != null && ctrlname != String.Empty)
        {
            control = Page.FindControl(ctrlname);
        }

        if ((control != null ) && (control.ID == Button1.ID))
        {
            int i = Convert.ToInt16(Session["i"].ToString());
            Session["i"] = i + 1;
        }

        int k = Convert.ToInt16(Session["i"].ToString());
        for (int j = 1; j < k; j++)
        {
            UserControl c = (UserControl)LoadControl("docu_ctrl.ascx");
            Panel1.Controls.Add(c);
            c.ID = "myctrl_" + j.ToString();
        }
    }

    protected void Button2_Click(object sender, EventArgs e)
    {
        int i = Convert.ToInt16(Session["i"].ToString());
        i = i - 1;
        for (int j = 1; j <= i; j++)
        {
            UserControl c = (UserControl)Panel1.FindControl("myctrl_"+j.ToString());
            FileUpload fu = (FileUpload)c.FindControl("FileUpload1");
            if (!fu.HasFile)
            {
                this.Button2.Text = c.ID;
            }
           
        }
    }

新增的按鈕需要設定UseSubmitBehavior="False",這樣就可以達成了

但是!!!!!!!!!!

如果動態加入的是UpLoadFile控制項怎麼辦

重選!重選!少按一下,為了新增,全部重選!

所以想到這一招,雖然沒成功,不過我會把他試到成功!

        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"
            ChildrenAsTriggers="False">
            <ContentTemplate>
                <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
                <asp:FileUpload ID="FileUpload2" runat="server" />
                    <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional"
                        ChildrenAsTriggers="False">
                    </asp:UpdatePanel>
            </ContentTemplate>
        </asp:UpdatePanel>

用巢狀updatePanel 去作

先放一個UpdatePanel裡頭放一個FileUpload、一個TextBox、及「另一個」UpdatePanel,

並設定UpdateMode="Conditional" 、ChildrenAsTriggers="False"。

要新增時按下button 則會在「另一個」UpdatePanel裡加入一個FileUpload、一個TextBox及「新的」UpdatePanel

當然button也是放外另外的UpdatePanel裡!設定同上!

新增按鈕的程式:

    protected void Button1_Click(object sender, EventArgs e)
    {       
        if (Session["i"] == null)
        {
            Session["i"] = 2;
        }
        else
        {
            int i = Convert.ToInt16(Session["i"].ToString());
            Session["i"] = i + 1;
        }
        int j = Convert.ToInt16(Session["i"].ToString());
        UpdatePanel up_old = (UpdatePanel)this.Page.FindControl("UpdatePanel" + (j).ToString());
        TextBox tb = new TextBox();
        up_old.ContentTemplateContainer.Controls.Add(tb);
        tb.ID = "tb" + j.ToString();
        FileUpload fu = new FileUpload();
        up_old.ContentTemplateContainer.Controls.Add(fu);
        fu.ID = "fu" + j.ToString();
        UpdatePanel up_new = new UpdatePanel();
        up_old.ContentTemplateContainer.Controls.Add(up_new);
        up_new.UpdateMode = UpdatePanelUpdateMode.Conditional;
        up_new.ID = "UpdatePanel" + (j+1).ToString();
        up_new.ChildrenAsTriggers = false;
        up_old.Update();
    }

礙於網頁生命週期,是過不了的

我覺的想法可行,想想想~~~~~~~~~~~~~

(也許可以在UpdatePanel裡放新增的button,然後點button時會找父UpdatePanel底下的子UpdatePanel,在裡面加入要的東西[包含新增及UpdatePanel] )

看那天能弄出來!

 

一個蔔蔔一個坑!