0

私は画像アップロードモジュールに取り組んでおりAsyncFileUpload、ページにコントロールがあります。これにより、(ユーザーがファイルパスを参照すると) ファイルが一時的に保持されます。メソッドを呼び出すまでバッファリングしAsyncFileUpload.SaveAs(filePath)

私の場合のシナリオは、完全なフォームを送信するときにこのメソッドを呼び出したいということです(目的は、ユーザーが画像を閲覧し、後で操作をキャンセルすることを決定した場合、ファイルをサーバーに保存してはならないということです)、

AsyncFileUpload.SaveAs(filePath)代わりに、内部で呼び出そうとしてprotected void btnUpload_Click(object sender, EventArgs e)いますが、そうすると、NullReferenceExceptionがユーザーコードによって未処理であることがわかります。

これはAsyncFileUpload、ポストバック イベントが発生するために発生していると考えられます。そのため、再度呼び出すと空になります。

おそらく、実行時に一時バッファからファイルを保存/アクセスする必要があります。

どんな提案でも大歓迎です。

StackTrace ショー:

System.Web.UI.WebControls.Button.OnClick(EventArgs e) の d:\Projects\ImageRepository_default.aspx.cs:line 27 の _default.btnUpload_Click(オブジェクト送信者、EventArgs e) で AjaxControlToolkit.AsyncFileUpload.SaveAs(String fileName) で) System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) で System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) で System.Web.UI.Page. System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) の RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) System.Web.UI.Page.ProcessRequestMain(ブール値の includeStagesBeforeAsyncPoint、ブール値の includeStagesAfterAsyncPoint)

4

2 に答える 2

1

コントロールを に設定するpersist=trueと、AsyncFileUpload イベントの外部でそのコンテンツにアクセスできるようになります。

于 2012-05-30T17:28:39.927 に答える
0

よろしければ、より洗練された方法が見つかるまで、この方法を試すことができます。まず、静的コントロールを定義します。

private static AsyncFileUpload fu = new AsyncFileUpload();

次に、Page_Load に次の行を追加します。

fileUpload.UploadedComplete += fileUpload_UploadedComplete;

どこ

protected void fileUpload_UploadedComplete(object sender, AsyncFileUploadEventArgs e)
        {
            fu = fileUpload;
        }

は、ページ/Web ユーザー コントロールで使用されるコントロールfileUploadの ID です。AsyncFileUpload

これにより、アップロード用に選択されたファイルの詳細が保持されます。

このシナリオは、ファイルがサーバーに既に存在し、確認アラート (上書きするかどうかに同意する) をユーザーに通知する必要がある場合に使用します (このアラートによってポストバックが発生し、ASU からの情報が失われるため)。

回避策を探して貴重な時間を失ったので、それが誰かの助けになることを願っています. 最終的にこれを思いつきましたが、もっとエレガントな方法があると思います。

さよなら

于 2012-11-20T09:29:03.490 に答える