1

レガシー Web アプリをリファクタリングしています。このアプリには、body タグ内 (マスター ページ上) で onload イベントを使用して、この JavaScript スクリプトを実行しています。このスクリプト タグは、ドキュメントのフォーム要素の後にあることに注意してください。私は構文が恐ろしいように見えることを知っています (または、Visual Studio は少なくとも波線によってそれであると伝えます)。

function DisplayPDF()
{
    var strPDF
    strPDF = "<%=SESSION("PDF")%>";
    if (strPDF.length != 0)
     {
        window.open(strPDF);
        <%Session("PDF") = ""%>
     }
}

私の質問は、よりエレガントなソリューションを開発しようとしているということです。ASP.NET ajax と jQuery の両方を利用できます。これを処理するために使用したい小さなasp.net ajaxコンポーネントを作成しました。

Type.registerNamespace("ck");

ck.pdfOpener = function() {
  ck.pdfOpener.initializeBase(this);
}

ck.pdfOpener.prototype = {
    initialize: function() {
        ck.pdfOpener.callBaseMethod(this, 'initialize');
    },

    dispose: function() {        
        ck.pdfOpener.callBaseMethod(this, 'dispose');
    },

    openPDF: function(){
       //HOW CAN I RETRIEVE A SESSION VARIABLE HERE???
    }
}

ck.ClientControl.registerClass('ck.pdfOpener', Sys.Component);
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();

このようにすることはできますか?または、上記の変数を返す WebService を作成する必要があります。アドバイスをありがとう。

乾杯、
サンディエゴで~ck

4

3 に答える 3

1

コード ビハインドでを使用Page.ClientScript.RegisterClientScriptBlock(typeof(YOURPAGECLASS), "KEY", "ACTUALJSCODE");します (つまり、Page_Load イベント ハンドラ)。

于 2009-07-09T15:48:26.160 に答える
1

別の方法として、クライアント スクリプト内ではなく、asp.net ページから直接 PDF ファイルを送信することもできます。

string pdfFile = Session("PDF");
if (!string.IsNullOrEmpty(pdfFile))
{
  Session.Remove("PDF");

  Response.ContentType = "application/pdf";
  FileInfo fi = new FileInfo(pdfFile);
  Response.AddHeader("Content-Disposition", "attachment; filename=\"" + Path.GetFileName(pdfFile) + "\"");
  Response.AddHeader("Content-Length", fi.Length.ToString()); 
  Response.WriteFile(pdfFile);
  Response.Flush();
  return;
}
于 2009-07-09T20:44:22.457 に答える
0

これを行う簡単な方法は、セッションから必要な値を返すページ メソッド、MVC アクション、HttpHandler、または Web サービスへの Ajax 呼び出しを行うことです。ここでのより大きな問題は、なぜ PDF ファイルへのパスをセッション状態に保存しているのかということです。

于 2009-07-09T15:51:30.927 に答える