Как получить значение сеанса с помощью javascript

У меня есть класс для обработки переменных сеанса. Вот пример:

namespace General
{

    public class Session
    {
        public Session()
        {
        }


        public static string UserID
        {
            get { return HttpContext.Current.Session["UserID"] as string ?? String.Empty; }
            set { HttpContext.Current.Session["UserID"] = value;  }
        }

        public static string departFlightID
        {
            get { return HttpContext.Current.Session["departFlightID"] as string ?? String.Empty; }
            set { HttpContext.Current.Session["departFlightID"] = value; }
        }

        public static string returnFlightID
        {
            get { return HttpContext.Current.Session["returnFlightID"] as string ?? String.Empty; }
            set { HttpContext.Current.Session["returnFlightID"] = value; }
        }
}

}

Теперь в какой-то момент я храню flightID в:

General.Session.departFlightID = flightID;

И в другой момент я хочу получить это значение с помощью Javascript. Я видел примеры здесь, но они не будут работать (нет ошибки, но они вернут EMPTY).

Самые последние попытки:

 var session = '<%= General.Session.departFlightID %>';
 var session = '<%= HttpContext.Current.Session["departFlightID"] %>';

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

Чтобы сделать это более ясным, это код Javascript:

<script type="text/javascript">


function addTicket(flightID, flightType) {
    PageMethods.addTicket(flightID, flightType, OnGetMessageSuccess);
}

function OnGetMessageSuccess(result, userContext, methodName) {

    var pageUrl = document.URL;
    if (pageUrl.indexOf("&ret_date=&") !== -1) {

        var session = '<%= HttpContext.Current.Session["departFlightID"] %>';

        alert(session);
        result = result + "<a onclick=\"searchflight.abortAllAjax()\" data-index=\"6\" class=\"bookNow\" title=\"Book Now!\" href=\"#\">Book Now!</a>";
        result = result + "</div>    </div>  </div>";
        document.getElementById("detail").innerHTML = result;
    }

}

И вот веб-метод:

[System.Web.Services.WebMethod]
    public static string addTicket(string flightID, string flightType)
    {
        //GET FLIGHT DETAILS  FROM DATATABLE OR SESSION DATA TABLE
        string tmpHtml = string.Empty;
        tmphtml="sample";
        string flightID="123123213";
        General.Session.departFlightID=flightID;

    return tmphtml;
    }

Ответ 1

Это тот же вопрос, что и здесь.

обычно мы имеем конфиденциальные данные в переменных сеанса, поэтому они всегда являются серверными. Тем не менее, если вы хотите, вы можете попробовать добавить HiddenField в свою разметку .aspx и в коде, который вы можете установить. после установки значения вы можете легко получить доступ к значению с помощью метода $( "# id" ) или Document.GetElementById().

Ответ 2

Если вы используете mvc, то:

var ttype = ' @HttpContext.Current.Session["TestType"] ';

Ответ 3

WebMethods по умолчанию не поддерживают переменные сеанса. Ваша декларация WebMethod должна выглядеть следующим образом:

[WebMethod(EnableSession = true)]