2010-12-28 12 views
0

私は画像をダウンロードするためにclickイベントを呼び出すボタンを持っています。クリックイベントでは、保存ダイアログが表示されるので、私のディスプレイを変更するコードがあります。私が抱えている問題は、ダイアログが表示されたときに前の行のコードが実行されなくなることです。関数を呼び出す前に自分のコードが実行されていることを確認するにはどうすればよいですか?ここでResponse.WriteFile前のリクエストを停止します

は私のボタンのイベントハンドラと機能である:

protected void btnSave_Click(object sender, EventArgs e) 
{ 
    var _title   = txtTitle.Text; 
    txtTitle.Text  = string.Empty; 
    txtDescription.Text = string.Empty; 

    ChangeDisplay(); 

    if (Request.Browser.Browser == "IE") 
     lblSnapShot.Visible = (lblSnapShot.Visible) ? false : true; 

    SaveSnapShot(_title); 
} 

void SaveSnapShot(string _title) 
{ 
    try 
    { 
     FileInfo _fileToDownload = new FileInfo(_path); 
     Response.Clear(); 
     Response.ContentType = "image/png"; 
     Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + _title + ".png\""); 
     Response.WriteFile(_fileToDownload.FullName); 

     HttpContext.Current.ApplicationInstance.CompleteRequest(); 
    } 
    catch (System.Exception ex) 
    { 
     ChangeDisplay(); 

     if (Request.Browser.Browser == "IE") 
      lblSnapShot.Visible = (lblSnapShot.Visible) ? false : true; 

     Response.Write("SAVE FAILED \n Error: " + ex.Message); 
    } 
} 
+0

唯一の 'response.write'は、「保存に失敗しました」ということです。もう少しあなたの質問を説明できますか? –

+0

@rockinthesixstring私は質問の曖昧さをお詫び申し上げます。私の質問のタイトルはResponse.WriteFileだったはずです。 clickイベントでは、関数の前のすべてのコードがSaveSnapShot()を呼び出します。実行されません。 Response.WriteFileがそのコードの処理を停止しているようです。関数呼び出しをコメントアウトすると、clickイベント内のすべてのコードが実行されます。 – BDonald

+0

とResponse.End()にはCompleteRequest()と同じ問題がありますか? – hova

答えて

2

Response.WriteFileは(?あなたがそうであっても、どのようにできたのWriteFileを呼び出す前に、そのコードが来た)他のコードの処理を停止しません

しかし、SaveSnapshotメソッドは、HTMLの通常の応答ではなく、画像をブラウザに返送します。ブラウザからのリクエストごとに1つのレスポンスしか送信できません。イメージファイルを送り返したりHTMLを同時に更新することはできません。

+0

私は同じことを考えていましたが、コールをコメントアウトすると、他のコードがうまく処理されます。 – BDonald

+0

が正しい。通常、ASP.NETはHTMLを生成して返します。 Response.WriteFileを呼び出すと、それをオーバーライドし、代わりにファイルを返すようにASP.NETに指示します。あなたはあなたのWebアプリケーションへの別個の要求をするためにユーザーのブラウザ(javascript経由)を取得する必要があり、別の要求ではResponse.WriteFileを呼び出す場所が必要です。 –

+0

ありがとうございます。別にリクエストする例を教えてもらえますか?私は愚かな質問をしていないことを願っています。私はこれとしばらく戦ってきましたし、私の脳は今は機能率が低いです。 – BDonald

関連する問題