Как предотвратить повторную отправку файла AsyncFileUpload при обратной передаче?

Я занимаюсь разработкой приложения, которое управляет фотоконкурсом. В этом приложении я использую элемент управления AsyncFileUpload для выбранной пользователем фотографии. UploadedComplete на стороне сервера выполняет базовую проверку и масштабирует / обрезает изображение по мере необходимости.

Проблема в том, что когда я нажимаю кнопку "Отправить" на странице, содержимое AsyncFileUpload отправляется вместе с другими данными, отправленными пользователем, поэтому пользователю приходится ждать в два раза дольше, чтобы получить ответ от сервера (ожидаются фотографии размером от 3 до 7 Мб, загрузка которых занимает минуту или две).

Моя форма выглядит так:

<%-- ... snip - all other fields ... -->
<div style="margin-top: 20px; margin-bottom: 5px;">
    <span class="texteB"><b>Upload a photo</b></span><br />
    Browse your computer to find a photo.</div>
<div>
    <asp:AsyncFileUpload onclientuploaderror="UploadError" persistfile="true" onuploadedcomplete="fuPhoto_UploadedComplete"
        completebackcolor="#52ad0b" onclientuploadstarted="UploadStarted" id="fuPhoto"
        throbberid="throbber" runat="server" />
</div>
<div runat="server" id="throbber" style="display: none; margin: 8px 0 15px 0">
    <div style="float: left; width: 48px;">
        <img src="images/throbber.gif" /></div>
    <span class="texteV_14pt"><b>Please wait while
        <br />
        your photo is uploaded...</b></span>
</div>
<div style="margin-top: 20px; margin-bottom: 20px;">
    Please double-check your informations and press Send when ready.</div>
<div>
    <asp:ImageButton onclick="btnSubmit_Click" ImageUrl="images/bt_envoyer_demande.gif"
        runat="server" id="btnSubmit" />
</div>

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

Заранее спасибо!

2 ответа

Решение

AsyncFileUpload на самом деле не работает так Это действительно работает только при использовании файловых данных в OnUploadedComplete событие.

Я бы просто укусил пулю и использовал что-то вроде SWFUpload или просто использовал нативный FileUpload контроль.

private bool _justDeleted = false;

void AsyncFileUpload1_UploadedComplete(object sender, AsyncFileUploadEventArgs e)
{
    if (_justDeleted) return;

protected void btnDeleteLogo_Click(object sender, EventArgs e)
{
    _justDeleted = true;
Другие вопросы по тегам