我正在重构遗留的网络应用。这个应用程序有一个正在使用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。谢谢你的任何建议。
干杯,
〜在圣地亚哥
答案 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文件的路径?