ASP.net FileUpload控制不保持多视图面板的状态

问题描述:

为简单起见,我有一个简单的2面板多视图。首先有一个FileUpload控件,第二个是一个按钮,用于发送包含该文件的电子邮件作为附件。当我在第二个选项卡上选中“FileUpload1.HasFile”时,它将返回为false。如果我回到视图1,其他控件的所有状态都已正确维护,除非文件上载空白。ASP.net FileUpload控制不保持多视图面板的状态

<asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="0"> 
    <asp:View ID="Step1" runat="server"> 
     <asp:FileUpload ID="FileUpload1" runat="server" Width="450" EnableViewState="true" /> 
    </asp:View> 
    <asp:View ID="Step2" runat="server"> 
     <asp:Button ID="btnSubmitForm" runat="server" Text="Submit Data" onclick="btnSubmitForm_Click" /> 
    </asp:View> 
</asp:MultiView> 

当用户导航到查看2和点击按钮:

//Initialize smtp server 
      SmtpClient smtp = new SmtpClient("myHost"); 

      //Initialize mail message object 
      MailMessage mail = new MailMessage(); 

//Set all mail message params (to, cc, subject etc...) 

//attach file, this is where it fails to recognize the attached document. bool is false :(
if (FileUpload1.HasFile) 
{ 
mail.Attachments.Add(new Attachment(FileUpload1.PostedFile.InputStream, FileUpload1.FileName)); 
} 

任何想法???

文件上传被认为是安全敏感的。当用户选择要上传的文件时,表单提交必须在任何其他重定向之前进行。要让浏览器允许从状态“恢复”该值,可能会导致钓鱼的旧时代。这是一个网站将有一个窗体与隐藏的文件上传控制与预先填充的值。当用户提交表单时,浏览器也会上传文件(如果存在)。

现代安全标准阻止了这些尝试。如果您希望用户上传文件,则无法导航到新页面。您可以重新设计以在一页上完成所有操作,也可以在页面导航过程中将上传的文件存储到某个临时位置,并将唯一ID返回到新页面,然后将该页面提交到一起。并为点击后的用户实施清理或者不要继续第二页。