2019年5月2日 星期四

[FileUpload] UpdatePanel+ FileUpload 在PostBack 後會失效

FileUpload 在上傳檔案後 在PostBack 後 就失效了,無法再上傳了
這是FileUpload 的缺點,在 https://dotblogs.com.tw/stanley14/2016/08/10/173019的文章中
發現 重新註冊trigger 可以解決 這個問題,

protected void Page_Load(object sender, EventArgs e) { Master.UpdatePanel1.Triggers.Add(new PostBackTrigger { ControlID = Button1.UniqueID }); Page.Form.Attributes.Add("enctype", "multipart/form-data"); ScriptManager.GetCurrent(Page).RegisterPostBackControl(Button1); }


//我在網頁上多個 UpdatePanel 的寫法

  foreach (Control ctl in Page.Master.FindControl("ContentPlaceHolder1").Controls)
        {
            //Utility.log(1, ctl.ID.ToString());
            if (ctl.GetType().Name == "UpdatePanel")
            {
                UpdatePanel p = (UpdatePanel)ctl;

                string name = p.ID.Replace("panel_", "btn_");
                string type = p.ID.Replace("panel_", "");

                Button btn = (Button)p.FindControl(name);

                btn.Text = getStr("upload_file");

                //因為fileUpload 在postback 後,上傳功能會鎖住 所以必需要重新註冊
                //https://dotblogs.com.tw/stanley14/2016/08/10/173019 參考這篇 重新註冊 trigger
                PostBackTrigger trigger = new PostBackTrigger();
                trigger.ControlID = btn.ID;
                p.Triggers.Add(trigger);
                ScriptManager.GetCurrent(Page).RegisterPostBackControl(btn);
//Page.Form.Attributes.Add("enctype", "multipart/form-data");經測試,這行其實不需要
                if (_attach.Rows.Count > 0)
                {
                    attach_List(type);
                }
            }
        }