摘要:突發起想,動態載入「控制項」並「保留狀態」
之前研究出來的作法是
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] )
看那天能弄出來!
一個蔔蔔一個坑!