0

簡単にするために、単純な 2 パネルのマルチビューを用意しました。1 つ目は FileUpload コントロールで、2 つ目はファイルを添付して電子メールを送信するボタンです。2番目のタブで「FileUpload1.HasFile」をチェックすると、falseに戻ります。ビュー 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>

ユーザーがビュー 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));
}

何か案は???

4

1 に答える 1

1

ファイルのアップロードは、セキュリティ上の注意が必要と見なされます。ユーザーがアップロードするファイルを選択すると、他のリダイレクトの前にフォームの送信が行われる必要があります。ブラウザーで状態から値を「復元」できるようにすると、昔のファイル フィッシングにつながる可能性があります。これは、値が事前入力された非表示のファイル アップロード コントロールを含むフォームがサイトにある場所です。ユーザーがフォームを送信すると、ブラウザはファイルが存在する場合はそれもアップロードします。

最新のセキュリティ標準は、これらの試みをブロックします。ユーザーにファイルをアップロードしてもらいたい場合、新しいページに移動できません。1 つのページですべてを行うように再設計するか、ページ ナビゲーション中にアップロードされたファイルを取得して一時的な場所に保存し、新しいページに一意の ID を返し、そのページの送信時に 2 つを結び付けることができます。また、クリックして戻る人や 2 ページ目に進まない人のためにクリーンアップを実装します。

于 2011-07-12T15:47:18.317 に答える