【问题标题】:How can I get an ASP.NET Session variable into a javascript file?如何将 ASP.NET 会话变量放入 javascript 文件?
【发布时间】:2010-11-09 10:29:06
【问题描述】:

我正在重构旧版 Web 应用程序。这个应用程序有一个正在使用正文标记(在母版页上)内的 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 在圣地亚哥

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 在这个应用程序中,在页面上说“createInvoice.aspx”,有一个按钮可以根据屏幕内容运行活动报告,该报告保存为 PDF,这是那个新创建的 PDF。这里的要求是弹出新创建的 PDF。单击按钮将表单返回,并且 onload 处理程序看到有一个值,因此它使用该文件路径打开一个新窗口。我已经请求重新设计 is 但管理层希望在它工作时使用它。当然,他们非常“向我展示”,所以他们总是想看到新的东西。没时间收拾东西。 :( 有什么想法吗?
      【解决方案3】:

      或者,您可以直接从 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;
      }
      

      【讨论】:

        猜你喜欢
        • 2019-04-24
        • 1970-01-01
        • 1970-01-01
        • 2011-08-15
        • 1970-01-01
        • 2018-04-15
        • 2011-11-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多