2011-07-12 83 views
0

爲簡單起見,我有一個簡單的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)); 
} 

任何想法???

回答

1

文件上傳被認爲是安全敏感的。當用戶選擇要上傳的文件時,表單提交必須在任何其他重定向之前進行。要讓瀏覽器允許從狀態「恢復」該值,可能會導致釣魚的舊時代。這是一個網站將有一個窗體與隱藏的文件上傳控制與預先填充的值。當用戶提交表單時,瀏覽器也會上傳文件(如果存在)。

現代安全標準阻止了這些嘗試。如果您希望用戶上傳文件,則無法導航到新頁面。您可以重新設計以在一頁上完成所有操作,也可以在頁面導航過程中將上傳的文件存儲到某個臨時位置,並將唯一ID返回到新頁面,然後將該頁面提交到一起。併爲點擊後的用戶實施清理或者不要繼續第二頁。

相關問題