我在aspx.net页面中使用AsyncFileUpload控件。此控件在更新面板中运行。
我可以异步成功地将文件上传到服务器。
我的问题是我无法在每个文件上传后刷新整个页面,因此我需要弄清楚如何清理上次上传的文件,因此当用户选择要上传的新文件时,旧文件没有出现在控件中,并且控件不会将其上次上载保存在ViewState中。
我试过这个http://www.aspsnippets.com/Articles/Clear-contents-of-AsyncFileUpload-Control-after-upload-and-page-revisit.aspx但它只清除了html,当我执行服务器异步回发时,AsyncFileUpload控件仍然上传了最后一个文件。
有没有办法在服务器端进行清理?也许任何与视图状态相关的东西?
任何帮助将不胜感激,谢谢。
答案 0 :(得分:5)
在客户端,您可以使用OnClientUploadComplete
事件清除上次上传的文件条目。文件上传完成后,回发发生时,AsyncFileUpload1.HasFile
将返回false
。
在aspx
页面中:
<asp:AsyncFileUpload ID="AsyncFileUpload1" OnClientUploadComplete="success" OnUploadedComplete="AsyncFileUpload1_UploadedComplete" runat="server" />
和JavaScript代码内部:
function success() {
var fu = document.getElementById("AsyncFileUpload1");
document.getElementById("AsyncFileUpload1").innerHTML = fu.innerHTML;
}
答案 1 :(得分:2)
这对我有用:
function ClearFile() {
$('input[type="file"]').each(function () {
$("#" + this.id).replaceWith($("#" + this.id).clone(true));
});
//For other browsers
$('input[type="file"]').each(function () { $("#" + this.id).val(""); });
}
答案 2 :(得分:0)
服务器端清除对我有用:
protected void FileUploadComplete(object sender, EventArgs e)
{
string filename = System.IO.Path.GetFileName(AsyncFileUpload1.FileName);
AsyncFileUpload1.PostedFile.SaveAs(Server.MapPath("Uploads/") + filename);
ClearContents(sender as Control);
}
private void ClearContents(Control control)
{
for (var i = 0; i < Session.Keys.Count; i++)
{
if (Session.Keys[i].Contains(control.ClientID))
{
Session.Remove(Session.Keys[i]);
break;
}
}
}
参考:Fer的问题链接。 http://www.aspsnippets.com/Articles/Clear-contents-of-AsyncFileUpload-Control-after-upload-and-page-revisit.aspx
答案 3 :(得分:0)
<asp:AsyncFileUpload ID="AsyncFileUpload1" OnClientUploadComplete="success" OnUploadedComplete="AsyncFileUpload1_UploadedComplete" runat="server" />
和
function success(sender, args) { $(sender._element).find('input').val(''); }
一个在所有现代浏览器上都能完美呈现,感谢&#34; Scotty.NET&#34;