清除AjaxToolkit AsyncFileUpload控件

时间:2011-07-12 21:28:55

标签: asp.net ajaxcontroltoolkit

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

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

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

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

有没有办法在服务器端进行清理?也许任何与视图状态相关的东西?

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

4 个答案:

答案 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;