4

asyncfileupload コントロールを使用してファイルをアップロードしています。次のようなビュー ステートでパスを取得しています。

protected void ProcessUpload(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
    string name = System.IO.Path.GetFileName(e.FileName); 
    string dir = Server.MapPath("upload_eng/");
    string path = Path.Combine(dir, name);
    ViewState["path"] = path;
    engcertfupld.SaveAs(path);
}

ボタンクリックイベントでそのパスを保存しようとすると、ビューステートの値が取得されません:

protected void btnUpdate_Click(object sender, EventArgs e)
{
   string filepath = ViewState["path"].ToString(); // GETTING NULL in filepath
}

このファイルパスでは、実際にはnullになっていますが、エラーが発生していますNULL REFERENCE EXCEPTION

今何ができますか?

4

2 に答える 2

4

次のように、ViewState の代わりにSessionオブジェクトにPath 値を入れます。

protected void ProcessUpload(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{

    ....
    string path = Path.Combine(dir, name);
    Session["path"] = path;
}

次に、ボタンクリックで:

protected void btnUpdate_Click(object sender, EventArgs e)
{
  if (Session["path"] != null)
  {
     string filepath = (string) Session["path"];
  }
}
于 2012-11-30T10:31:44.710 に答える
1

アップロード プロセスは「実際の」ポストバックではないため、ViewState はクライアント側で更新されず、btnUpdate_Click をクリックしてもパスが含まれません。

OnClientUploadComplete クライアント側イベントを使用して、アップロードされたファイル名を取得し、btnUpdate_Click でサーバーにポストされる HiddenField に格納する必要があります。

アップロードされたファイル名を使用して、ポストバックなしでアップロードされた画像を表示する完全な例を次に示します。

http://www.aspsnippets.com/Articles/Display-image-after-upload-without-page-refresh-or-postback-using-ASP.Net-AsyncFileUpload-Control.aspx

于 2012-11-30T10:26:27.520 に答える