Я получил контроль работает просто отлично 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>
Я работаю с вариантом решения AjaxFileUploadEventArgs.PostedUrl. Благодаря! –