ASP.net FileUpload Control не поддерживает состояние на панелях множественного просмотра - PullRequest
0 голосов
/ 12 июля 2011

Для простоты у меня есть простой 2-х панельный многовид. На первом есть элемент управления FileUpload, а на втором - кнопка, которая отправляет электронное письмо с файлом в виде вложения. Когда я проверяю «FileUpload1.HasFile» на второй вкладке, он возвращается как ложный. И если я вернусь к представлению 1, все состояния для каждого другого элемента управления будут должным образом поддерживаться, за исключением файла загрузки, который является пустым.

<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>

Когда пользователь переходит к View 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 Ответ

1 голос
/ 12 июля 2011

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

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

...