【问题标题】:FileUpload empty after PostBackPostBack 后 FileUpload 为空
【发布时间】:2013-12-05 07:51:25
【问题描述】:

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

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

当用户选择了一个文件但还没有点击按钮时(koala.jpg)

按下按钮时,文件消失(未选择文件)

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

编辑:

请注意,我简化了问题,并且第一篇文章的内容只是为了让我的问题更清楚而编造。

页面加载:

    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

【问题讨论】:

  • 你能把Page_Load事件的代码发给你吗?
  • 一些关于Button Click事件的cmets,建议你用javascript检查txtSubect.Text是否为空,如果为空,则显示错误信息,另外,我不认为txtSubject。文本将为空..

标签: c# asp.net file-upload


【解决方案1】:

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

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

解决办法是防止回发,回发前使用JavaScript检查值。

【讨论】:

  • 如果我无法设置该值,我在使用JavaScript时应该如何处理该值?如果我保留该值,我知道我的程序保留了该文件,但用户认为该文件已消失,因为 fileuploader 这么说。
  • @NiekJonkman - 使用 JavaScript 验证文本框字段是否有值。如果它没有价值,请不要提交表单。如果您确实允许回发表单,那么唯一的解决方案是用户必须再次选择文件。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-04-05
    • 2011-12-05
    • 2015-01-11
    • 2010-12-22
    • 2012-03-09
    • 1970-01-01
    • 2019-12-03
    • 2020-06-09
    • 1970-01-01
    相关资源
    最近更新 更多