ASP 表单在回发时丢失文件附件
ASP form losing file attachments on postback
我有一个 aspx 表单,其中包含一系列用户输入,然后是一个提交按钮,用于打包该信息并发送一封包含已解析数据和任何附件的电子邮件。
我正在使用 asp:fileupload 供用户将文件附加到电子邮件,单击按钮时它会触发我在代码隐藏中编写的方法,该方法会检查以确保填充所有必填字段,如果不是,我会返回错误消息弹出窗口并关注第一个失败的必填字段。问题是在推回后它失去了附件。所以我需要能够在客户端检查我的字段并且我的背景是 C++,所以脚本对我来说是新的。感谢任何帮助。
我的部分表格供视觉参考:
http://i.stack.imgur.com/Ioawg.png
显示我目前是如何进行错误处理的
http://i.stack.imgur.com/PhfQw.png
这是具有 post 后退机制的安全功能。服务器无法保留有关物理文件存储位置的任何信息。它只知道您将一系列字节发送到一个字段中。
解决此问题的一种方法是使用 AJAX 在浏览器中保持状态。你可以看看UpdatePanel
或者自己做一个简单的实现。
回发时,上传文件将被清除;这是无法避免的。但也有解决方法。
首先,如果可能的话,在提交表单之前添加 RequiredValidators 以检查客户端是否缺少数据。
<asp:textbox id="Text1" text="Enter a value" runat="server" />
<asp:requiredfieldvalidator id="RequiredFieldValidator1" controltovalidate="Text1"
text="Required Field!" runat="server" />
<asp:button id="Button1" runat="server" text="Validate" />
<asp:validationsummary id="valSum" displaymode="BulletList" runat="server" headertext="You must enter a value in the following fields:" />
你也可以写一些 javascript 来做你正在寻找的自动对焦。
- 如果您确实需要提交表单并在代码隐藏中对其进行验证,请使用随机文件名将发布的文件保存到服务器上的临时文件夹中。使用文件名更新表单上的隐藏标签或 ViewState,以便您可以在下一次回发时从服务器取回文件。您可以隐藏上传控件并将其替换为标签 "File {name} ready for upload" 和按钮 "upload different file".
注意:不要将实际文件内容放入 viewState 或会话中。这对性能不利。
当您第一次检索文件的内容时,将它们保存在某个地方,例如 ViewState、Session 或数据库。那么您只需要接收一次文件即可。
为避免混淆,您可以将检索文件并将其余表单输入收集到工作流程中的单独步骤中。
我有一个 aspx 表单,其中包含一系列用户输入,然后是一个提交按钮,用于打包该信息并发送一封包含已解析数据和任何附件的电子邮件。
我正在使用 asp:fileupload 供用户将文件附加到电子邮件,单击按钮时它会触发我在代码隐藏中编写的方法,该方法会检查以确保填充所有必填字段,如果不是,我会返回错误消息弹出窗口并关注第一个失败的必填字段。问题是在推回后它失去了附件。所以我需要能够在客户端检查我的字段并且我的背景是 C++,所以脚本对我来说是新的。感谢任何帮助。
我的部分表格供视觉参考: http://i.stack.imgur.com/Ioawg.png
显示我目前是如何进行错误处理的 http://i.stack.imgur.com/PhfQw.png
这是具有 post 后退机制的安全功能。服务器无法保留有关物理文件存储位置的任何信息。它只知道您将一系列字节发送到一个字段中。
解决此问题的一种方法是使用 AJAX 在浏览器中保持状态。你可以看看UpdatePanel
或者自己做一个简单的实现。
回发时,上传文件将被清除;这是无法避免的。但也有解决方法。
首先,如果可能的话,在提交表单之前添加 RequiredValidators 以检查客户端是否缺少数据。
<asp:textbox id="Text1" text="Enter a value" runat="server" /> <asp:requiredfieldvalidator id="RequiredFieldValidator1" controltovalidate="Text1" text="Required Field!" runat="server" /> <asp:button id="Button1" runat="server" text="Validate" /> <asp:validationsummary id="valSum" displaymode="BulletList" runat="server" headertext="You must enter a value in the following fields:" />
你也可以写一些 javascript 来做你正在寻找的自动对焦。
- 如果您确实需要提交表单并在代码隐藏中对其进行验证,请使用随机文件名将发布的文件保存到服务器上的临时文件夹中。使用文件名更新表单上的隐藏标签或 ViewState,以便您可以在下一次回发时从服务器取回文件。您可以隐藏上传控件并将其替换为标签 "File {name} ready for upload" 和按钮 "upload different file".
注意:不要将实际文件内容放入 viewState 或会话中。这对性能不利。
当您第一次检索文件的内容时,将它们保存在某个地方,例如 ViewState、Session 或数据库。那么您只需要接收一次文件即可。
为避免混淆,您可以将检索文件并将其余表单输入收集到工作流程中的单独步骤中。