在模式弹出窗口上使用FileUpload并处理回发

本文关键字:FileUpload 处理 模式 窗口 | 更新日期: 2023-09-27 18:27:44

我陷入了进退两难的境地。。。

我有一个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
}

所以现在我被卡住了:

  • 如果我省略了post-back触发器,我的验证会很好地工作-如果有什么问题,它会被标记并显示在弹出窗体上,并且弹出窗口不会关闭
    ===>但是在这种情况下,我无法读出上传图片的字节。。。。。(uploadPic.HasFile始终为false

  • 如果我放入post-back触发器,我的文件上传工作得很好,我可以读取我的字节,没有问题
    ===>但是现在,我的验证-在检测到错误时-无法显示错误,因为弹出表单正被完整的回发关闭。。。。

如果验证失败,是否有任何方法可以使BOTH-FileUpload控件中的字节,AND弹出窗口保持打开?

在模式弹出窗口上使用FileUpload并处理回发

此弹出窗口将为您提供完全控制,而不会出现任何回邮问题。你可以在这里看到这一点:http://atldunia.com/youtube/Zpopup.aspx您也可以下载代码。

我最终使用了Ajax控制工具包中的AsyncFileUpload组件——这在UpdatePanel上运行良好,满足了我的所有需求。