PostBack后FileUpload为空

时间:2013-12-05 07:51:25

标签: c# asp.net file-upload

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

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

当用户选择文件但尚未点击按钮时(koala.jpg) enter image description here

按下按钮时,文件消失(未选择文件)
enter image description here

如何在回发后将文件保留在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,显示为错误

2 个答案:

答案 0 :(得分:10)

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

但是,如果输入file,则无法设置值。

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

答案 1 :(得分:1)

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

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

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