2011-07-12 9 views
0

Для простоты у меня есть простая панель с двумя панелями. В первом есть элемент управления FileUpload, а во второй - кнопка, которая отправляет электронное письмо с файлом в виде вложения. Когда я проверяю «FileUpload1.HasFile» на второй вкладке, он возвращается как false. И если я вернусь в View 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

Загрузка файлов относится к уязвимостям безопасности. Когда пользователь выбирает файл для загрузки, отправьте заявку на форму перед любыми другими переадресациями. Чтобы браузер разрешил «восстановить» значение из состояния, может привести к старым дням промысла файлов. Здесь сайт будет иметь форму со скрытым контролем загрузки файлов с предварительно заполненным значением. Когда пользователь отправил форму, браузер также выгрузил бы файл, если он существовал.

Современные стандарты безопасности блокируют эти попытки. Если вы хотите, чтобы пользователь загружал файл, вы не можете перейти на новую страницу. Вы можете либо перепроектировать, чтобы сделать все на одной странице, либо взять загруженный файл во время навигации по страницам, сохранить его в каком-то временном месте, вернуть уникальный идентификатор на новую страницу и отправить эту страницу вместе. И реализуйте очистку для людей, которые нажимают кнопку «назад» или просто не переходят ко второй странице.