2011-07-12 38 views
5

我在aspx.net页面中使用AsyncFileUpload控件。此控件在更新面板中运行。清除AjaxToolkit AsyncFileUpload控件

我可以成功将文件上传到服务器异步。

我的问题是,我无法刷新整个页面后,每个文件上传,所以我需要弄清楚如何清理最后上传的文件,所以当用户选择一个新的文件上传,旧的文件不会出现在控件中,并且控件不会保留其在ViewState中的上次上载。

我试过这个http://www.aspsnippets.com/Articles/Clear-contents-of-AsyncFileUpload-Control-after-upload-and-page-revisit.aspx但它只会清除html,当我做服务器异步回发时,AsyncFileUpload控件仍然有最后一个文件上传。

有没有办法在服务器端进行清理?也许什么都与视图状态有关?

任何帮助将不胜感激,谢谢。

回答

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; 
} 
+0

感谢Waqas!这有助于我今天:-) –

+1

函数成功(发送者,参数){$(sender._element).find('input')。val(''); }' –

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; 
     } 
    } 
} 

参考:由费尔问题链接。 http://www.aspsnippets.com/Articles/Clear-contents-of-AsyncFileUpload-Control-after-upload-and-page-revisit.aspx

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(""); }); 
} 
0
<asp:AsyncFileUpload ID="AsyncFileUpload1" OnClientUploadComplete="success" OnUploadedComplete="AsyncFileUpload1_UploadedComplete" runat="server" /> 

function success(sender, args) { $(sender._element).find('input').val(''); } 

一个适用于所有现代浏览器perfectl,这要归功于 “Scotty.NET

相关问题