2013-10-02 6 views
2

Я получил контроль работает просто отлично AjaxFileUpload - это будет загружать, и по завершении вызывает код на стороне сервера, чтобы переместить файлы вокруг, работает просто отлично, и т.д. и т.д. и т.п.AjaxFileUpload: как я могу предупредить пользователя об ошибке на стороне сервера в OnUploadComplete?

Что я волнуюсь являются потенциальными ошибками на стороне сервера и как отказать пользователю какое-то предупреждение. Не ошибка Ajax, а что-то на серверном коде.

Теперь у меня log4net работает нормально, и он вызывается в моем коде для улавливания ошибок и весело сбрасывает журналы, когда я жестко кодирую ошибку.

Но это ничего не говорит пользователям.

RegisterStartupScript не подходит, потому что нет PostBack, который позволит ему работать (так же, как моя первая попытка заполнения полей. Doh!).

Теперь я могу засунуть некоторые JS в ClientUploadComplete или ClientUploadCompleteAll сделать PostBack ... но это не кажется правильным, и это потребовало бы, чтобы на сторону сервера ошибки-сообщения будут очереди вверх для отображения. Кроме того, он очищает отображение AjaxFileUpload того, что было загружено.

Вся ошибка обработки, которую я видел относительно этих элементов управления, - это ошибки Ajax. Есть ли что-нибудь для проблем на стороне сервера, что позволяет легко получить обратную связь с пользователем?

Я даже лаю по верным деревьям?


UPDATE Использование указателей @Yuriy's other answer я получил следующую работу:

Onn стороне сервера:

protected void OnUploadComplete(object sender, AjaxFileUploadEventArgs e) 
    { 
     try 
     { 
      // does something with the uploaded files that _might_ fail 
     } 
     catch (Exception ex) 
     { 
      var ce = Logger.LogError(ex); 

      var msg = string.Format("{{ 'id': '{0}', 'message': '{1}'}}", 
       ce.ErrorId, ce.Message); 
      e.PostedUrl = msg; 
     } 
    } 

(Регистратор выводит полное исключение в журнал log4net , и возвращает номер ошибки и полезное для потребителя сообщение для поддержки контакта)

Назад на страницу, t он AjaxFileUpload управления сконфигурирован для вызова JS при полной:

<asp:AjaxFileUpload runat="server" ID="Uploader" MaximumNumberOfFiles="10" 
OnUploadComplete="OnUploadComplete" 
OnClientUploadComplete="AjaxFileUpload1_OnClientUploadComplete"/> 

И JavaScript:

<script type="text/javascript"> 
    function AjaxFileUpload1_OnClientUploadComplete(sender, args) { 

     var errText = args.get_postedUrl(); 
     if (!errText) return; // only process if populated 

     var errinfo = Sys.Serialization.JavaScriptSerializer.deserialize(errText); 

     if (errinfo && errinfo.id && errinfo.message) { 
      var idEl = document.getElementById('errnbr'); 
      var msgEl = document.getElementById('errmsg'); 
      if (idEl && msgEl) { 
       idEl.innerHTML = errinfo.id; 
       msgEl.innerHTML = errinfo.message; 
      } 
     } 
    } 
</script> 

который заполнит следующее:

<div class="failureNotification" id="ErrorDisplay" runat="server"> 
    <span id="errnbr"><asp:Literal ID="ErrorNumber" runat="server"></asp:Literal></span> 
    <span id="errmsg"><asp:Literal ID="FailureText" runat="server"></asp:Literal></span> 
</div> 

ответ

1

Хотя AjaxFileUploadState перечисление включают Failed члена, что я могу Не находите случая, когда он использовался.

Итак, есть два решения, которые я считаю.

Первый подправить ACT проект, чтобы добавить сеттер в State и StatusMessage свойств AjaxFileUploadEventArgs класса и обрабатывать значения этих свойств на клиенте в raiseUploadComplete функции Sys.Extended.UI.AjaxFileUpload.Control класса и onUploadCompleteHandler из Sys.Extended.UI.AjaxFileUpload.ProcessorHtml5 класса.

Или вы можете передать пользовательский JSON клиенту через свойство AjaxFileUploadEventArgs.PostedUrl, десериализовать его на клиенте в обработчике OnClientUploadComplete и показать сообщение об ошибке, если оно есть. Пожалуйста, проверьте этот вопрос для образца использования PostedUrl property: getting asynfileupload controls file name on button click

+0

Я работаю с вариантом решения AjaxFileUploadEventArgs.PostedUrl. Благодаря! –

Смежные вопросы