如何将ASP.NET Session变量转换为javascript文件?

时间:2009-07-09 15:43:16

标签: javascript asp.net-ajax session-state

我正在重构遗留的网络应用。这个应用程序有一个正在使用body标签内的onload事件(在主页面上)来运行这个javascript脚本。请注意,此脚本标记位于doc中的表单元素之后。我知道语法看起来很可怕(或者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。谢谢你的任何建议。

干杯,
〜在圣地亚哥

3 个答案:

答案 0 :(得分:1)

在后面的代码中使用Page.ClientScript.RegisterClientScriptBlock(typeof(YOURPAGECLASS), "KEY", "ACTUALJSCODE");(即Page_Load事件处理程序)

答案 1 :(得分: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;
}

答案 2 :(得分:0)

执行此操作的一种简单方法是,您只需对页面方法,MVC操作,HttpHandler或Web服务进行Ajax调用,即从会话中返回所需的值。这里更大的问题是为什么要在会话状态中存储PDF文件的路径?