【发布时间】:2014-12-20 02:26:23
【问题描述】:
我陷入了第 22 条第 22 条规定的情况……
我有一个 ASP.NET 4.0 Webforms 应用程序,它使用模型弹出窗口(使用 Ajax 控件工具包的 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)如果我放入回发触发器,我的文件上传效果很好,我可以读出我的字节没问题
==> 但是现在,我的验证 - 虽然检测到有问题 - 无法显示错误,因为弹出表单正在被完整的回发关闭....
有没有办法获得 BOTH - FileUpload 控件中的字节,AND 如果验证失败,弹出窗口保持打开状态?
【问题讨论】:
标签: c# asp.net file-upload webforms updatepanel