我在FileUpload控件上遇到了一些问题,我想知道是否能得到一些帮助。
在我的页面上,我有一个FileUpload控件和一个下拉列表。
因此,用户浏览到他们想要的文件,然后从下拉列表中选择一个选项(这使得一些复选框也在页面上使用,取决于他们在下拉列表中的选择)。这将导致FileUpload控件变成空的,现在用户必须再次浏览到他们想要的文件。
有没有办法防止FileUpload控件在PostBack过程中丢失其内容?
由于您尝试了Relster的建议,但没有成功,Spencer是正确的。 出于安全考虑,除了浏览器,任何东西都不可能在<input type="file">元素中设置路径。 唯一的解决方法是重组流程,这样只有在你要提交文件时才会进行回传,用客户端脚本进行其他操作。
之所以不能设置路径,是因为这样会让你窃取用户的文件。 例如,如果你隐藏了输入,并且有一个看起来很无辜的回帖按钮,你可以将文件输入的默认路径设置为任何你想获得的访问权限,用户就会在不知道发生了什么的情况下上传文件。
所以,如果我理解正确的话,下拉有自动回帖属性设置为true,你要检查下拉的值来对复选框进行默认修改?
相反,尝试使用客户端脚本来做这个技巧。
我很可能会使用客户端脚本来解决这个问题。
然而我已经找到了一个使用ajax的解决方案,对于那些可能感兴趣的人来说。
http:/forums.asp.nett1125781.aspx
来自Jessica Cao的帖子,里面也有一个代码示例。
"... 你可以用AJAX来做异步回传到服务器,让包含DropDownList的部分页面回传,而包含FileUpload控件的页面不会回传,所以FileUpload会保持FilePath。"
这个方法需要使用System.Web.Extensions.dll,因此需要使用.Net 3.5框架。
每当有一个postback时,你必须检查是否还有一个文件从客户端传来,并保存它。不过你无法在客户端重新填写输入框。我建议你最好隐藏文件上传控制(除非你允许多个文件上传),并在文件名旁边显示带有复选标记的文件。类似于GMail,当你上传文件到你的邮件中。
原因是安全问题,正如其他人指出的。
我也会禁用任何自动回传,因为如果上传文件的大小足够大,下拉式的改变对客户端来说可能看起来会持续很久。
我把我的自动回传控件封装在一个asp:updatepanel里面,这样就解决了除了验证失败的问题。
防止上传控件在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>
你不能这样做。一个简单的解决方案是转移到一个Ajax文件控制。