نگهداری وضعیت کنترل FileUpload بعد از PostBack
یکشنبه 15 شهریور 1394در این پست خواهیم دید که چگونه وضعیت یک کنترل FileUpload را بعد از PostBack نگه داریم.
هنگامی که یک کاربر در کنترل File Upload یک فایلی را انتخاب می کند، در هر انتخاب، وقتی که رویداد post back اتفاق می افتد، کنترل file upload مقدارش را از دست می دهد. این یک مشکل رایج برای بسیاری از برنامه نویسان می باشد.
کنترل File Upload در ASP.NET
کنترل file upload شامل یک text box و یک دکمه Browse می باشد. وقتی که یک فایل انتخاب می شود، در PostBack خصوصیت فایل پست شده (انتخاب شده) توسط شی کلاس HttpPostedFile بدست می آید. همانطور که می دانیم، درخواست http نمی تواند وضعیت (state) را نگهداری کند و فایل پست شده که با شی کلاس HttpPostedFile کار می کند، بنابراین وضعیت فایل از دست می رود و نگه داشته نمی شود. خصوصیات فایل پست شده، می تواند برای بدست آوردن اطلاعاتی مانند طول محتوا، نوع محتوا، نام فایل، جریان ورودی و غیره استفاده شود. همچنین یک متد SAveAs برای نگهداری فایل روی دیسک دارد.
راه حل
بهترین راه حل با کمترین تلاش Session می باشد. همانطور که می دانیم شی Session می تواند هر Object ی را ذخیره کند و تنها در این مورد تنها شی ای از نوع OutProc/State Server Serializable را در session ذخیره می کند.
بنابراین این ایده، بسیار آسان شی FileUpload را در Session ذخیره می کند و در post back مقادیر را از آن بدست می آورد. از کدهای آمده در زیر، در PageLoad استفاده کنید.
//If first time page is submitted and we have file in FileUpload control but not in session // Store the values to SEssion Object if (Session["FileUpload1"] == null && FileUpload1.HasFile) { Session["FileUpload1"] = FileUpload1; Label1.Text = FileUpload1.FileName; } // Next time submit and Session has values but FileUpload is Blank // Return the values from session to FileUpload else if (Session["FileUpload1"] != null && (! FileUpload1.HasFile)) { FileUpload1 = (FileUpload) Session["FileUpload1"]; Label1.Text = FileUpload1.FileName; } // Now there could be another sictution when Session has File but user want to change the file // In this case we have to change the file in session object else if (FileUpload1.HasFile) { Session["FileUpload1"] = FileUpload1; Label1.Text = FileUpload1.FileName; }
- ASP.net
- 2k بازدید
- 8 تشکر