Очистить элемент управления AjaxToolkit AsyncFileUpload - PullRequest
5 голосов
/ 13 июля 2011

Я использую элемент управления AsyncFileUpload на моей странице aspx.net.Этот элемент управления работает внутри панели обновления.

Я могу успешно загружать файлы на сервер асинхронно.

Моя проблема заключается в том, что я не могу обновить всю страницу после загрузки каждого файла, поэтомуМне нужно выяснить, как очистить последний загруженный файл, поэтому, когда пользователь выбирает новый файл для загрузки, старый файл не отображается в элементе управления и элемент управления не сохраняет свою последнюю загрузку в ViewState.

Я пробовал это http://www.aspsnippets.com/Articles/Clear-contents-of-AsyncFileUpload-Control-after-upload-and-page-revisit.aspx, но он очищает только HTML, когда я выполняю асинхронную обратную передачу на сервере, элемент управления AsyncFileUpload все еще имеет последний загруженный файл.

Есть ли способ сделатьочистка на стороне сервера?Возможно что-нибудь связанное с состоянием просмотра?

Любая помощь будет оценена, спасибо.

Ответы [ 4 ]

5 голосов
/ 05 августа 2011

На стороне клиента вы можете использовать событие OnClientUploadComplete, чтобы очистить последнюю запись загруженного файла. После завершения загрузки файла и обратной передачи AsyncFileUpload1.HasFile вернет false.

In aspx page:

<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; 
} 
2 голосов
/ 01 ноября 2012

Это сработало для меня:

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 голосов
/ 13 октября 2016
<asp:AsyncFileUpload ID="AsyncFileUpload1" OnClientUploadComplete="success" OnUploadedComplete="AsyncFileUpload1_UploadedComplete" runat="server" />

и

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

, что прекрасно работает во всех современных браузерах, благодаря " Scotty.NET "

0 голосов
/ 17 июля 2012

Очистка на стороне сервера у меня сработала:

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

...