Доступ к данным сеанса со страницы ASP.NET с помощью jquery - PullRequest
0 голосов
/ 13 июля 2010

Я пытаюсь передать переменную, хранящуюся в объекте Session моей страницы ASP.NET, с помощью jQuery, представляющей ход процесса, выполняющегося на сервере, в процентах.

Session['progress'] = 37;

Я просмотрел некоторые ответы здесь;мой код использует тот же метод, что и правильно заданный здесь вопрос:

<head>
...
    <script type="text/javascript">  
        function updateProgress() {
             var progress = '<%Session["progress"].ToString();%>';
        } 
    </script>
...
</head>

Компилятор ASP.NET возвращает NullPointerException.Я не уверен, что это потому, что объект Session еще не был создан (поскольку это происходит во время компиляции);или, возможно, объект Session не получает переменную должным образом (если это так, как я могу проверить это?)

Есть идеи?

Мне нужно найти какой-то способотключение передачи этого значения с сервера клиенту, чтобы пользователь мог обновить индикатор выполнения jQuery.

Спасибо!

Ответы [ 4 ]

3 голосов
/ 13 июля 2010

Если вы хотите получить изменяющийся номер в реальном времени из переменной сеанса на вашей странице, используя jQuery, вам нужно будет выполнить некоторый тип запроса ajax.Чтобы получить доступ к значению в состоянии сеанса, вы можете написать функцию [WebMethod] для отправки, получает / отправляет данные обратно в ваш запрос jQuery.

Запрос jQuery:

jQuery.ajax({
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: '{}',
    dataType: 'json',
    url: 'Default .aspx/TestMethod',
    success: function(result){
        alert(result.d);
    }
});

Страница сервераWebMethod:

using System;
using System.Web.Services;

namespace JqueryAjaxText
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        [WebMethod]
        public static string TestMethod()
        {
            return Session["progress"].ToString();
        }
    }
}
2 голосов
/ 13 июля 2010

Я думаю, вы неправильно понимаете порядок, в котором происходят вещи.Хотя SageNS обнаружил вашу ошибку, он не решил вашу проблему.

Код, который вы просто записываете в код javascript, и пользователь видит:

<head>
...
    <script type="text/javascript">  
        function updateProgress() {
             var progress = '37';
        } 
    </script>
...
</head>

Последовательные вызовы updateProgress() всегда будет возвращать 37.

Вам необходимо использовать функцию .ajax () jQuery для выполнения асинхронного вызова сервера, если вы хотите периодически обновлять прогресс сервера.

1 голос
/ 13 июля 2010

Вы можете составить ответ Захари и сделать его дальше, создав службу WCF и переключив ваш вызов $ .ajax () на GET вместо POST.Это не будет такой большой запрос (не то, чтобы POST был таким большим), но вы также будете использовать правильный HTTP-глагол.(POST используется для вставки; GET должен использоваться для извлечения данных).

Ваш вызов jQuery может выглядеть следующим образом:

jQuery.ajax({ 
    type: 'GET', 
    dataType: 'json', 
    url: 'MyService.svc/GetServerProgress', 
    success: function(result){ 
        alert(result.d); 
});

Затем вы создадите службу WCF и создадите службуметод с именем GetServerProgress.

    [OperationContract]
    [WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetServerProgress")]
    public int GetServerProgress()
    {
        return 37;
    }

Наконец, вы, вероятно, захотите, чтобы у клиента был некоторый JavaScript, который вызывает setTimeout() для вашего метода $ .ajax (), для которого вы периодически извлекаете прогресс сервера из WCF.сервис.

Удачи !!

0 голосов
/ 13 июля 2010

Использование

<%=Session["progress"].ToString()%>

для вывода данных на html-страницу

...