FileUpload在更新面板中不起作用

所以我要做的是让用户选择要上传的文件。 由于我只接受图像,我将测试扩展。 我还想将文件大小限制在2mb以下,所以我将测试它(尚未在代码中实现)。 如果他们选择的文件通过,那么我希望标签说“文件被接受”,并存储文件上传信息以便稍后点击按钮。 一旦用户填写完表单的其余部分,就会发生这种情况。 最后,我会在检查文件是否被允许时在页面上放置一个UpdateProgress控件。 我宁愿不为此发回信息,所以如果我能让它发挥作用,那就太好了。 顺便说一句,如果我从更新面板中取出标签,这一切都会正常工作。

当我运行它时会发生什么,是否会转到第一个if的else语句并返回“请选择一个文件”。 意味着FileUpload1.HasFile返回false。 我可以看到发生这种情况的唯一原因是因为UpdatePanel无法从FileUpload控件访问该信息?

代码背后:

Label SubmitButtonLabel2= (Label)UpdatePanel1.FindControl("SubmitButtonLabel"); if (FileUpload1.HasFile) { string[] fileName = FileUpload1.FileName.Split('.'); if ((fileName[fileName.Length - 1] == "jpg") || (fileName[fileName.Length - 1] == "gif") || (fileName[fileName.Length - 1] == "bmp") || (fileName[fileName.Length - 1] == "jpeg") || (fileName[fileName.Length - 1] == "png")) { SubmitButtonLabel2.Text = "File Accepted."; } else { SubmitButtonLabel2.Text = "File type not allowed. Please choose another."; } } else { SubmitButtonLabel.Text = "Please select a file."; } 

页:

  

无需执行任何操作,只需将多部分数据添加到表单中即可。

Page.Form.Attributes.Add("enctype", "multipart/form-data");
Page.Form.Attributes.Add("enctype", "multipart/form-data"); 

有关详细信息,请参阅以下链接。

http://knowledgebaseworld.blogspot.com/2009/02/file-upload-not-working-with-update.html

    

添加UpdatePanel的触发器并提供ControlID 。 如果您使用TabContainer ,请使用选项卡容器的ID。

page_load添加此行

 ScriptManager.GetCurrent(this).RegisterPostBackControl(this.Button); 

如果在“更新”面板中使用FileUpload控件,则必须为编写代码的按钮设置PostbackTrigger以保存上载文件。

现在下面的代码我有btnSave按钮用于保存上传文件夹中的文件。 所以我为它设置了postbacktrigger。

    

希望这会帮助你。

默认的asp.net FileUpload控件永远不会与UpdatePanel一起使用。 您需要AjaxControl Toolkit中定义的特殊AsyncFileUpload控件。 这个

http://www.asp.net/ajax/ajaxcontroltoolkit/samples/AsyncFileUpload/AsyncFileUpload.aspx

alt text http://ruchitsurati.net/files/fileupload.png

   

不要忘记更改表单的类型,允许文件上传(enctype或类似的东西,我不在Visual Studio前面所以不能那么精确。)

我有同样的问题。

按下按钮上传文件作为上传面板的触发器这样的事情,

      Add      

在使用此处发布的两个解决方案后,我开始工作了。

我不得不加两个

 Page.Form.Attributes.Add("enctype", "multipart/form-data"); 

在Page_Load以及

    

在更新面板的标记上。

Page.Form.Attributes.Add("enctype", "multipart/form-data");

只有这样做才能解决你的问题

参考这个

你可以在这里找到答案

由于javascript和浏览器安全原因,默认情况下基本上不允许它。 但这是一种解决方法。

我的猜测是,只有在post已经完成时才会填充HasFile,而不是在此之前。

您可能想要在post完成之前检查FileUpload1.FileName是否已经填充,但我有点怀疑。