在模式弹出窗口上使用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弹出窗口保持打开?
此弹出窗口将为您提供完全控制,而不会出现任何回邮问题。你可以在这里看到这一点:http://atldunia.com/youtube/Zpopup.aspx您也可以下载代码。
我最终使用了Ajax控制工具包中的AsyncFileUpload
组件——这在UpdatePanel
上运行良好,满足了我的所有需求。