ASP表单在回发时丢失文件附件

时间:2015-03-17 20:00:33

标签: c# asp.net push-back

我有一个aspx表单,其中包含一系列用户输入,然后是一个提交按钮,用于打包该信息并发送包含已解析数据和任何附件的电子邮件。

我正在使用asp:fileupload让用户将文件附加到电子邮件中,然后点击按钮点击我在代码隐藏中编写的方法,检查以确保填充所有必填字段,如果不是我回弹一个错误消息弹出窗口并聚焦失败的第一个必填字段。问题是在推迟后它失去了附件。所以我需要能够检查我的字段客户端,我的背景是C ++,所以脚本对我来说是新的。任何帮助表示赞赏。

我的视觉参考表格的一部分: http://i.stack.imgur.com/Ioawg.png

显示我当前是如何进行错误处理的 http://i.stack.imgur.com/PhfQw.png

3 个答案:

答案 0 :(得分:1)

在回发时,上传文件将清除;这无法避免。但是有一些解决方法。

  1. 首先,如果可能,在提交表单之前添加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:" />
    
  2. 你也可以写一些javascript来进行你正在寻找的自动对焦。

    1. 如果您确实需要提交表单并在代码隐藏中对其进行验证,请将发布的文件保存到服务器上的临时文件夹中,并使用随机文件名。使用文件名更新表单上的隐藏标签或ViewState,以便在下一次回发时从服务器获取文件。您可以隐藏上传控件并将其替换为标签&#34;文件{name}准备上传&#34;和一个按钮&#34;上传不同的文件&#34;。
    2. 注意:请勿将实际文件内容放在viewState或session中。这对性能不会有好处。

答案 1 :(得分:1)

首次检索文件的内容时,请将它们保留在某个位置,例如ViewState,Session或数据库。然后你只需要接收一次文件。

为避免混淆,您可以检索文件并将其余表单输入收集到工作流程中的单独步骤中。

答案 2 :(得分:0)

这是一种带回发机制的安全功能。服务器无法保留有关物理文件存储位置的任何信息。它只知道您将一系列字节发送到字段中。

解决此问题的一种方法是使用AJAX在浏览器中保持状态。您可以查看UpdatePanel或自己做一个简单的实现。