Я застрял в ситуации поймать-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
, И всплывающие остаются открытыми, если проверка не пройдена?