2013-07-17 3 views
10

У меня есть класс для обработки переменных сеанса. Вот образец прилагается:Как получить значение сеанса с помощью 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"] %>'; 

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

Чтобы сделать его более ясным здесь код 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; 
    } 

} 

А вот WebMethod:

[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; 
    } 
+0

вы пробовали: 'уаг сессии =«<% = HttpContext.Current.Session [ "departFlightID" ]; %> '; '? – karaxuna

+0

@karaxuna nope, но позвольте мне проверить ... – confusedMind

+0

отредактированный комментарий .. – karaxuna

ответ

2

Это тот же вопрос, как here.

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

0

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

[WebMethod(EnableSession = true)] 
+0

, к сожалению, это не так. – confusedMind

2

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

var ttype = ' @HttpContext.Current.Session["TestType"] '; 
Смежные вопросы