2012-03-05 10 views
0

イメージを強制的にダウンロードしてブラウザに表示しないアプリケーションがあります。 response.writefileはこれを達成しているようです。response.writefile( "filename.png")は、ボタンで起動したときに機能しますが、コールバックで起動したときには機能しません。

しかし、ICallBackEventハンドラ内からプログラムでプログラムを呼び出すと何も起こりません。エラーはスローされず、ちょうど一種のハングです。

コードをステップ実行すると、メソッドは実行されますが、ファイルはダウンロードされず、コールバックは終了しません。私は何が起こっているのか分かりません。

protected void Button1_Click(object sender, EventArgs e) 
{ 
    downloadtest(); 
} 

public string downloadtest() 
{ 
    string fileName = ""; 

    string outPath = HttpContext.Current.Server.MapPath("~/images/") + @"logo.png"; 

    fileName = "logo.png"; 

    Response.Clear(); 
    Response.AddHeader("content-disposition", "attachment;filename=" + fileName); 
    Response.WriteFile("logo.png"); 
    Response.End(); 

    return fileName; 
} 

ボタンをクリックするとうまくいきます。

私のコールバックコードからdownloadtest()を呼び出すと、何も起こりません。

ありがとうございます。

ここに私のコールバックコードがあります。

長いですが、ここには大きなチャンクがあります。

サーバー側第1 ...

   String cbReference = Page.ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context"); 
       String callbackScript = "function CallServer(arg, context)" + "{ " + cbReference + ";}"; 
       Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "CallServer", callbackScript, true); 

....... 

#region ICallbackEventHandler Members 

     string CBResult = string.Empty; 

     public string GetCallbackResult() 
     { 
      return CBResult; 
     } 

     public void RaiseCallbackEvent(string eventArgument) 
     { 
      string[] args = eventArgument.Split(','); 
      string sessionidvar = args[0]; 
      string Argument = args[1]; 

      GeoCollection<Overlay> MapOverlays; 

      string statepath = OverlayClass.SetStatePath(sessionidvar); 

      CBResult = string.Empty; 

      switch (Argument) 
....... 

case "contribution": 

        downloadtest(); 
        CBResult = "contribution"; 

        break; 

クライアント側....

function mapHeatLayerLoad(HEATLAYER) { 

    var sessionid = $('.logo').attr('data-SessionId'); 
    var offset = $('#divMap').offset(); 

    var HTML = "<div id='mapupdatingdiv'><H1>Map Updating...</H1>"; 
    HTML += "<img id='mapLoaderGif' src='/images/ajax-loader.gif' alt='Image'/>"; 
    HTML += "</div>"; 

    $('#divMap').append(HTML); 

    CallServer(sessionid + "," + HEATLAYER, ""); 
} 

.......... 

function ReceiveServerData(rValue) { 
    var argArray = rValue.split(','); 
    var map = Map1.GetOpenLayersMap(); 
    var sessionid = $('.logo').attr('data-SessionId'); 

    var PenetrationLayer = map.getLayer("PenetrationOverlay"); 
    var ContributionLayer = map.getLayer("ContributionOverlay"); 
    var PenChangeLayer = map.getLayer("PenChangeOverlay"); 
    var ConChangeLayer = map.getLayer("ConChangeOverlay"); 
    var CompetitorLayer = map.getLayer("CompetitorOverlay"); 
    var HighLightLayer = map.getLayer("HighLightDynamicOverlay"); 
    var ZipBordersLayer = map.getLayer("ZipBordersOverlay"); 
    var PSALayer = map.getLayer("PSAOverlay"); 
    var SSALayer = map.getLayer("SSAOverlay"); 
    var WaterLayer = map.getLayer("WaterOverlay"); 
    var HighwaysLayer = map.getLayer("HighwaysOverlay"); 
    var ASCIconLayer = map.getLayer("ASCIconOverlay"); 
    var HospitalIconLayer = map.getLayer("HospitalIconOverlay"); 
    var ASCLayer = map.getLayer("ASCOverlay"); 
    var HospitalsLayer = map.getLayer("HospitalsOverlay"); 
    var ClientLayer = map.getLayer("ClientOverlay"); 

    $('#mapupdatingdiv').fadeOut('slow', function() { $('#mapupdatingdiv').remove(); }); 

    switch (argArray[0]) { 

........ 


     case "contribution": 

      map.getLayer("ContributionOverlay").redraw(true); 
      BuildLegend(2); 
      break; 


...... 
+1

私たちにあなたのコールバックコードを教えてください。 – egrunin

+0

コールバックでメソッドを呼び出すと、実際にdownloadtest()の内部に移動していますか? –

+0

コールバックはサーバー上のコードセクションに移動します。ここからdownloadtest()が実行されます。 – eshepard

答えて

1

私はそれを考え出しました。コールバックからResponse.xxを開始することはできません。私は私が望む機能を実行し、ポストバックでJavaScriptから呼び出す非表示のASPボタンを設定します。

関連する問題