【问题标题】:FileUpload control loses its content on PostBackFileUpload 控件在 PostBack 上丢失其内容
【发布时间】:2012-03-09 05:52:06
【问题描述】:

我有 3 个FileUpload 控件。当页面PostBack 时,他们会丢失内容。当我单击一个按钮以显示一些隐藏的控件时,该页面被回发。

在不使用session 的情况下,我能做些什么来保留它们的内容?

【问题讨论】:

    标签: c# asp.net file-upload postback


    【解决方案1】:

    由于 HTTP/Forms 的工作方式,确实没有办法解决这个问题。该文件将在第一次发布到服务器时提交。您也可以将文件字节存储在 ViewState 中,但回发速度会很慢。您的选择是不执行回发并使用 javascript 或其他替代方法来获得相同的功能或将文件存储在服务器上的某个位置(例如:会话、临时文件夹、数据库)。

    【讨论】:

    • 基本上,对于您通过回发更改的任何内容,您都会使用 javascript 做同样的事情,因此页面只有在用户完全填写表单并且服务器准备好后才会真正回发接受文件。例如,当用户选中复选框以设置其他字段的可见性时,您无需回发,而是使用 javascript。
    【解决方案2】:

    FileUpload控件的内容保存在服务器端。或者你可以在 html 页面中渲染它并使用 CSS 隐藏它

    【讨论】:

      【解决方案3】:

      这实际上与安全有关。想象一下通过文件上传访问一个站点,并且路径预先填充了“c:\Users\Meensat\passwords.docx”之类的内容。你点击提交,他们就有你的密码。

      您可以在回发时执行的操作是使用.PostedFile 属性检查文件,如果存在,则将其保存到临时文件中。在 Session 中,存储对临时文件的引用、文件名等。

      编辑

      .PostedFile 实际上是FileUpload 控件的一个属性。

      http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload.postedfile.aspx

      该链接的示例代码显示了如何将文件保存到磁盘。

      【讨论】:

        猜你喜欢
        • 2012-03-13
        • 1970-01-01
        • 1970-01-01
        • 2011-12-05
        • 1970-01-01
        • 1970-01-01
        • 2012-04-05
        • 2014-05-03
        • 1970-01-01
        相关资源
        最近更新 更多