2014-10-24 1 views
1

Я застрял в ситуации поймать-22 ...Использование FileUpload на модального всплывающего окна и обработки постбэки

У меня есть приложение ASP.NET 4.0 WebForms, который использует модель всплывающие окна (с помощью Ajax Control Toolkit ModalPopupExtender-х компонент) для получения ввода от пользователя.

Один экран используется для добавления новых членов или редактирования записей существующего участника. Эти записи включают в себя изображение члена, который я загружаю с помощью стандартного элемента управления ASP.NET FileUpload.

Этот экран создания/редактирования завернут в UpdatePanel, так что, когда я всплываю оверлей, я могу заполнить текстовые поля существующими значениями (при редактировании существующего элемента).

Поскольку всплывающее окно использует UpdatePanel, я должен был определить явный PostBackTrigger так, что моя Save кнопка будет на самом деле вызывает полный постбэк и так, что я в состоянии прочитать байты изображения закачанного в управлении FileUpload.

<asp:UpdatePanel ID="pnlCreateOrEdit" runat="server"> 
    <ContentTemplate> 
     .... asp.net controls here, including: 
     <asp:FileUpload ID="uploadPic" runat="server" /> 
     .... 
     <asp:Button ID="btnSave" runat="server" OnClick="BtnSaveClicked" Text="Save" /> 
    </ContentTemplate> 
    <Triggers> 
     <asp:PostBackTrigger ControlID="btnSave"/> 
    </Triggers> 
</asp:UpdatePanel> 

Если я не определить, что PostBackTrigger, то мой загруженный файл не может быть считан.

НО: когда я определить, что триггер обратной передачи, теперь я не могу сделать мою проверку больше, так как если я делаю проверку в методе btnSaveClicked и выходит из строя (что-то не хватает, например), я могу обнаружить, что - но Я не могу ответить на него больше, так как всплывающее окно не будет закрыто, независимо от того, что я пытался до сих пор ....

protected void BtnSaveClick(object sender, EventArgs e) { 
    // do my validation - if something is amiss, don't go any further 
    if (!IsValid()) { 
     return; 
    } 

    // read back the data 
    // hide the modal popup form 
    // call an event handler to process the inputs 
} 

так что теперь я застрял:

  • если Я опускаю триггер обратной связи, моя проверка работает хорошо - если что-то не так, оно помечено и показано во всплывающей форме, и всплывающее окно не закрыто.
    ==>НО В этом случае я не могу зачитать байты загруженного изображения ..... (uploadPic.HasFile всегда false)

  • если я ставлю в пост обратно триггером, моя загрузка файлов работает хорошо, я не могу зачитать мои байты это не проблема
    ==>НО теперь, мое подтверждение - при обнаружении что-то amiss - не может показать ошибку, так как всплывающая форма закрывается полной обратной передачей ....

Есть ли способ, чтобы получить ОБА - байты в элементе управления FileUpload, И всплывающие остаются открытыми, если проверка не пройдена?

ответ

0

Я закончил с использованием компонента от Ajax Control Toolkit - это прекрасно работает на UpdatePanel и удовлетворяет всем моим потребностям.

0

Это всплывающее окно даст вам полный контроль без каких-либо проблем с обратной записью. вы можете увидеть это в действии здесь: http://atldunia.com/youtube/Zpopup.aspx вы также можете скачать код.