【问题标题】:How to save a fileupload to a viewstate after postback?回发后如何将文件上传保存到视图状态?
【发布时间】:2012-12-30 15:46:13
【问题描述】:

我在页面上有一个 FileUpload 和多控件。除 FileUpload 外,所有控件都位于更新面板中。

回发后,我将文件上传保存在视图状态中。

private FileUpload Files
{
    get { return (FileUpload)ViewState["Files"]; }
    set {
        ViewState["Files"] = value;
    }
}


.
.
.
if (ImageFileUpload.HasFile)
 {
    Files = ImageFileUpload;
 }

但我得到错误

在程序集“System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”中的类型“System.Web.UI.WebControls.FileUpload”未标记为可序列化。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    简短的回答是 - 这不能完成......
    当您收到带有 FileUpload 的回发时,您必须在此时保存(或做任何您想做的事情)。您不能为以下回发保留信息流。

    可以做的是:

    1. 将文件保存到服务器。
    2. 将文件名添加到 ViewState,以便您以后可以在本地访问该文件。

    换句话说,是这样的:

    string filename;
    ......
    // Save file to disk
    fileUpload1.SaveAs(filename);
    // Keep path to file in ViewState
    ViewState["FileLocation"] = filename;
    

    【讨论】:

    • 谢谢,我想在点击保存按钮时保存文件。但我有一个下拉列表,表明自动回发是真的。当我更改下拉列表文件上传为空时,我想保存文件上传并在保存按钮中保存它。
    • 听起来像一个 UX 问题,解决有人可能先选择文件然后更改下拉列表的问题 - 直到下拉列表更改后,才创建 FileUpload1.Visible = false。仅当更改下拉列表时才使FileUpload1.Visible = true
    • 我有多个下拉列表供用户更改。我想在第一次回发后保存文件上传。有可能吗???!!
    • @Niloo - 是的,您可以通过检查 HasFile 属性是否为 true(在 Page_Load 中)来保存文件。如果您选择了一个文件然后执行了 AutoPostback,它应该仍然是正确的。如果它不是真的,你有其他东西(比如更新面板)导致问题......
    • 我想解释一下 - 你别无选择...你只有 一次机会 来保存文件,它将在用户选择文件后的第一次回发...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多