如何防止FileUpload控件在postback时清空?

问题描述 投票:4回答:7

我在FileUpload控件上遇到了一些问题,我想知道是否能得到一些帮助。

在我的页面上,我有一个FileUpload控件和一个下拉列表。

因此,用户浏览到他们想要的文件,然后从下拉列表中选择一个选项(这使得一些复选框也在页面上使用,取决于他们在下拉列表中的选择)。这将导致FileUpload控件变成空的,现在用户必须再次浏览到他们想要的文件。

有没有办法防止FileUpload控件在PostBack过程中丢失其内容?

asp.net file-upload controls postback
7个回答
7
投票

由于您尝试了Relster的建议,但没有成功,Spencer是正确的。 出于安全考虑,除了浏览器,任何东西都不可能在<input type="file">元素中设置路径。 唯一的解决方法是重组流程,这样只有在你要提交文件时才会进行回传,用客户端脚本进行其他操作。

之所以不能设置路径,是因为这样会让你窃取用户的文件。 例如,如果你隐藏了输入,并且有一个看起来很无辜的回帖按钮,你可以将文件输入的默认路径设置为任何你想获得的访问权限,用户就会在不知道发生了什么的情况下上传文件。


5
投票

所以,如果我理解正确的话,下拉有自动回帖属性设置为true,你要检查下拉的值来对复选框进行默认修改?

相反,尝试使用客户端脚本来做这个技巧。


2
投票

我很可能会使用客户端脚本来解决这个问题。

然而我已经找到了一个使用ajax的解决方案,对于那些可能感兴趣的人来说。

http:/forums.asp.nett1125781.aspx

来自Jessica Cao的帖子,里面也有一个代码示例。

"... 你可以用AJAX来做异步回传到服务器,让包含DropDownList的部分页面回传,而包含FileUpload控件的页面不会回传,所以FileUpload会保持FilePath。"

这个方法需要使用System.Web.Extensions.dll,因此需要使用.Net 3.5框架。


1
投票

每当有一个postback时,你必须检查是否还有一个文件从客户端传来,并保存它。不过你无法在客户端重新填写输入框。我建议你最好隐藏文件上传控制(除非你允许多个文件上传),并在文件名旁边显示带有复选标记的文件。类似于GMail,当你上传文件到你的邮件中。

原因是安全问题,正如其他人指出的。

我也会禁用任何自动回传,因为如果上传文件的大小足够大,下拉式的改变对客户端来说可能看起来会持续很久。


1
投票

我把我的自动回传控件封装在一个asp:updatepanel里面,这样就解决了除了验证失败的问题。


1
投票

防止上传控件在postback时丢失文件的简单解决方案是将上传控件放在一个ASP:Updatepanel之外。更新面板 控件放在一个.aspx页面上。或者,换句话说,将所有可能触发回传的输入控件放在 里面 更新面板。

例如:"你不能这样做。

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <ajax:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"></ajax:ToolkitScriptManager>
    <table>
        <tr>
            <td>
                <asp:UpdatePanel runat="server" ID="Up_LeaveDetails" UpdateMode="Always">                                 
                    <ContentTemplate>
                        <asp:DropDownList ID="DDl_LeaveType" runat="server" CssClass="textfield" Width="150" AutoPostBack="true" OnSelectedIndexChanged="DDl_LeaveType_SelectedIndexChanged">
                        </asp:DropDownList>
                    </ContentTemplate>
                 </asp:UpdatePanel>
            </td>
            <td>
                <asp:FileUpload ID="UploadCertificate" runat="server" />
            </td>
        </tr>
    </table>
</asp:Content>

0
投票

你不能这样做。一个简单的解决方案是转移到一个Ajax文件控制。

© www.soinside.com 2019 - 2024. All rights reserved.