FileUpload in Autogenerate Form postback - asp.net

I have a problem. I have a Dynamic form created in asp.net. Generally it has fileupload companent . In This time page postback is fire than form generated again and selected file is disappear. My question is how to hold this file in memory?
Am I hold this folder in fileselecting?
Have you any idea for this?

This is due to security in asp.net. You do not have the ability to specify the value of the file upload and a postback will clear it. You could take care of this by doing thing asynchronously. Try using the AsyncFileUpload control in the AjaxToolKit. You can read about how to use it at http://www.kruegerwebdesign.com/blog/async-file-uploading-using-asp-net.

Related

Dynamic destination with AjaxFileUpload

I am using an AjaxFileUpload for multiple file upload. It is working, but I want to change the destination with the value in a textbox. The code is below which is in the AjaxFileUpload1_onUploadComplete method:
string myDir= myDirTextBox.Text.Trim();
AjaxFileUpload1.SaveAs(Server.MapPath("../allarticles/"+ myDir+"/"+e.FileName));
I debug the project and write a name in the myDirTextBox. Then when I click the Upload File button the value of this textbox is always null. That's why I can't change the destination dynamically.
I have read this article but it is not clear: upload multiple files with ajaxFileUpload with different file ids
What is the problem and how can I solve it?
When server event occurs the page goes through complete page lifecycle.
That means your code deals with new, uninitialized version of a page which is not related in any way with the page you see in a browser.
To save the value of a textbox and utilize it later you need to write some code to store this value between page requests. This can be simple JavaScript code attached to Upload button, that posts textbox value with AJAX to a server. Server, in turn, will store this value in session or another persistent storage.

How to type a filename in the ASP.NET FileUpload Control

I'm Using the ASP.NET FileUpload Control for the first time and so far its working, except one thing: It seems that it is not possible to type a path and filename like
C:\Temp\myfile.txt
into the FileUpload control directly. I always have to use the OpenFileDialog.
Is there a way to enable the text box of the FileUpload control, so I can type into it?
I'm using ASP.NET 4.0.
Not that I know of. I believe the reason for this is that you could theoretically write javascript to populate it with "c:\path\to\awesome\file.txt" and upload it silently without the user's knowledge, therefore it's not possible to type stuff into it or pre-populate it in any way.

Storing ascx in database

I would like to store the ascx control code into a database. Then rather then load the control from a filepath location, I would like to retrieve it from the database and load it into the UserControl. The UserControl.LoadControl only has two overload options. Without saving the control from a database to a temporary file and then load from the temporary file, is it possible do this direct from the database?
Can you use ParseControl instead? Link to MSDN.
The method accepts a string that is then compiled on the fly as a Control object.
You could load your control markup from the database and then hand it off to ParseControl to get an instance of your control back.
Hope this helps!
The only problem is that the ParseControl does not cause compilation, so if there are any Codes in your ascx, they will not get executed.
So far the only option for me has been to write the ascx to file (either permanently or temporarily) and then use LoadControl method to load the ascx.

asp:upload postedfile lost during postback

I am using an asp:upload control to upload an image and am using the postedfile property to insert the path to the database. In my form I have a dropdown with autopostback=true where the user can select a topic to populate a checkbox list of categories. During that postback, the postedfile value is being lost and after a little research I have discovered that the posted file value is not maintained in viewstate for security reasons. Has anybody else found out how to get around this?
That's how it works. The value of a intput type="file" is never used on parsing an HTML page. That's a huge security risk, so no modern browser will allow them to 'retain' values. So in ASP.NET, every postback "loses" the value.
On any postback with a file in the input control, be sure to save the value somewhere you can get to it later.
Or don't design a form that uses a file upload to have multiple postbacks. Perhaps consider wrapping your drop down list and associated control in an UpdatePanel so the file upload doesn't get cleared.
The value attribute of an input file element simply cannot be set by anything except user interaction. That's the way it works, and that will not change due to security concerns. That said, your solution is to eliminate the postback.
I would try to load the checkbox list via JavaScript/AJAX, possibly saving the values of the checkbox list to a hidden field so I can retain the values on a postback.
This may not be ideal, but if you want to do this all with no postbacks, at some point your going to have to use JavaScript.
You could try the AsynchFileUpload control in the AjaxControlToolkit, but there isn't a workaround for the standard fileupload unless you save the file to a temporary folder and load a file list from that temp folder.

Maintaining ViewState for FileUpload Control

I am creating FileUpload controls at run time. When I click a LinkButton a new FileUpload control is generated.
Now suppose I have selected a file from a FileUpload control and I click the LinkButton. The previous FileUpload control loses its path. However, I'm maintaining the ViewState of each control that I create at runtime by using this line:
f1.enableviewstate = true;
How do I maintain the selected file for a FileUpload control?
Steps
user selects a file
user click LinkButton (issues a postback that adds additional file uploading control)
server side should get the file on postback and store it somewhere (anywhere)
replace first <input type=file> with something like Label and check mark icon (to tell user the file has already been uploaded (or even a read-only text box with disabled browse button to fake file upload control - however you won't be able to display correct file path in it)
user is presented with a new form that has new empty file upload control in showing already uploaded files.
For security reasons you can't manipulate <input type=file> in any way shape or form.
Hack approach
If I understood you correctly your link button adds additional file upload controls to your page. Instead I'd create a sufficient number of upload controls the first time and display just one. Others would be hidden by CSS. After user clicks the LinkButton, it would however have only client-side Javascript functionality that would reveal additional control. And another... and another... and another... until maximum is reached.
Complex approach
You could however make it in a different way by using more Javascript and make it more Web 2.0-ish. You should however upload those files via <iframe>
as some of the others mentioned, you cannot preserve the viewstate of a FileUpload due to security issues.
What you could do is to simply add a Label just below the FileUpload. When the user clicks on the linkbutton in order to generate a new FileUpload, a postback will be fired where you could check whether the FileUpload controls present on the page have some value (i.e. the user already selected a file to upload), and if so, you could directly start to upload that file and show the result (the path or filename) on the label, just that the user knows he has added that file already. You could also hide the fileupload and additionally add a remove link to again remove the uploaded file (similar approach as Gmail does).
Hope this helped.
Juri
You can't pre-select a file path in the file upload input tag (security related - the user must select the file), so .Net is not able to populate the value from viewstate.
Consider if you really need to at it at runtime?
If you really need to at runtime; Don't forget to add it to the closest container's Controls property. Doing this makes sure it's state is serialized to the ViewState.
Hope this helps...
as per me there is no way to persist viewstate of fileupload in asps.net.
u can store it's value in hidden field,session etc file u can not be able to assign that value to again file upload because it is read only

Resources