PostBack后FileUpload为空

关于回发后为空的ASP.NET fileuploader,我遇到了问题。 我有一个文件上传控件,一个文本框控件和一个按钮控件。

当我单击按钮时,它会检查文本框是否已填充,是否执行操作,如果不是则显示错误消息并保留在页面上。 但是,当我按下按钮并且文本框为空时,按钮回发并且fileuploader为空,用户必须再次选择该文件。 所以:用户选择文件>文件位于fileuploader>用户按下按钮>弹出错误信息>文件上传器在回发后丢失文件。

当用户选择文件但尚未点击按钮时(koala.jpg) 在此处输入图像描述

按下按钮时,文件消失(未选择文件)
在此处输入图像描述

如何在回发后将文件保留在fileuploader中,或者如果文本框为空则告诉按钮不要回发?

编辑:

请注意,我简化了问题,并且第一篇文章的内容只是为了使我的问题更加清晰。

页面加载:

protected void Page_Load(object sender, EventArgs e) { //First check if User is logged in if (Session["User"] == null) { Response.Redirect(GetRouteUrl("Login", null)); } TicketsBLL objTicketsBll = new TicketsBLL(); var cat = objTicketsBll.getAllCategories(); ddlCategory.DataTextField = "name"; ddlCategory.DataValueField = "id"; ddlCategory.DataSource = cat; ddlCategory.DataBind(); } 

按钮单击:

 //check if everthing is filled : errorContent.Visible = false; errorSubject.Visible = false; if (txtSubject.Text == "" || txtSubject.Text == null || txtContent.Text == null || txtContent.Text == "") { if (txtSubject.Text == "" || txtSubject.Text == null) { errorSubject.Visible = true; } if(txtContent.Text == null || txtContent.Text == ""){ errorContent.Visible = true; } } else { //Do something after this 

errorSubject&errorContent是隐藏的div,显示为错误

无法设置文件输入的值。 这是一个浏览器安全function,它与password字段相同,唯一的区别是password字段可以使用JavaScript设置值。

但是,使用file输入时,无法设置值。

解决方案是阻止回发,使用JavaScript在回发之前检查值。

正如Phill指出的那样,您无法从后面的代码或从表单值重新填充更新此Control。

如果您依靠自动回发来更改表单上其他位置的数据,则需要处理初始FileUpload并创建一个假占位符,指示要上载的文件名。

更简单的解决方案可能是将需要AutoPostBack的其他控件包装在UpdatePanel中,以便它们可以独立于“文件上载”控件进行回发。

 if(!IsPostback) { } 

使用此代码