Как я могу получить переменную сеанса ASP.NET в файл JavaScript? - PullRequest
1 голос
/ 09 июля 2009

Я занимаюсь рефакторингом устаревшего веб-приложения. Это приложение использует событие onload внутри тега body (на главной странице) для запуска этого сценария JavaScript. Обратите внимание, этот тег сценария находится после элемента формы в документе. Я знаю, что синтаксис выглядит отвратительно (или Visual Studio, по крайней мере, говорит, что это из-за загадок), но я буду проклят, вещь действительно работает.

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

Мой вопрос: я пытаюсь разработать более элегантное решение. У меня есть ASP.NET ajax и jQuery, которые доступны для меня. Я написал крошечный компонент Ajax asp.net, который я хочу использовать для решения этой проблемы.

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 в Сан-Диего

Ответы [ 3 ]

1 голос
/ 10 июля 2009

Кроме того, вы можете отправить файл PDF непосредственно со страницы asp.net, а не внутри клиентского скрипта.

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;
}
1 голос
/ 09 июля 2009

Используйте Page.ClientScript.RegisterClientScriptBlock(typeof(YOURPAGECLASS), "KEY", "ACTUALJSCODE"); в своем коде позади (т.е. обработчик события Page_Load)

0 голосов
/ 09 июля 2009

Простой способ сделать это, как вы сказали, просто выполнить Ajax-вызов метода страницы, действия MVC, HttpHandler или веб-службы, которая возвращает требуемое значение из сеанса. Большой вопрос здесь - почему вы храните путь к файлу PDF в своем состоянии сеанса?

...