Доступ к переменной сеанса ASP.NET из JavaScript - PullRequest
2 голосов
/ 26 сентября 2011

Когда будет выполнен код var accNo = '<%=Session["hdnAccession"]%>';?Я изменяю переменную сеанса в событии Page_LoadComplete, но когда я получаю к ней доступ, используя var accNo = '<%=Session["hdnAccession"]%>';, она всегда возвращает значение, которое я установила FIRST.В Page_LoadComplete мне нравится следующее ... Session["hdnAccession"] = GetNewAccession(), Когда я отлаживал, я видел, что Session["hdnAccession"] обновляется каждый раз.Но почему это не обновляется в JavaScript?Я нахожусь в ситуации, когда я не могу использовать HiddenField вместо Seession.

Ответы [ 3 ]

2 голосов
/ 26 сентября 2011

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

<script type="text/javascript">
<!--
function setSessionVariable(valueToSetTo)
{
 __doPostBack('SetSessionVariable', valueToSetTo);
}
// -->
</script>

private void Page_Load(object sender, System.EventArgs e)
{
 // Insure that the __doPostBack() JavaScript method is created...
 this.GetPostBackEventReference(this, string.Empty);

 if ( this.IsPostBack )
 {
  string eventTarget = (this.Request["__EVENTTARGET"] == null) ? string.Empty : this.Request["__EVENTTARGET"];
  string eventArgument = (this.Request["__EVENTARGUMENT"] == null) ? string.Empty : this.Request["__EVENTARGUMENT"];

  if ( eventTarget == "SetSessionVariable" )
  {
   Session["someSessionKey"] = eventArgument;
  }
 }
}

Смотрите здесь: http://forums.asp.net/post/2230824.aspx

1 голос
/ 26 сентября 2011

Для этого необходимо использовать некоторый серверный элемент управления (например, HiddenField или скрытый диапазон с runat = "server").

<% = Session ["hdnAccession"]%> будет оценивать толькопри первом входе на страницу, а не во время обратных передач.

0 голосов
/ 26 сентября 2011

Ваш кодовый блок получает свои значения при визуализации страницы, и поэтому любые значения, установленные в Page_Load или Page_LoadCompleted, должны правильно отображаться на стороне клиента.

Если это не так,должна быть другая проблема - попробуйте проверить это, добавив временное свойство на страницу, инициализируйте его в Page_Load и запишите его на стороне клиента (т. е. var test = "<%=SomeProperty%>";).

Если проблема возникаеттолько после выполнения обратной передачи (это не очень понятно из вашего вопроса) вам, вероятно, придется использовать скрытые поля.Могут быть и другие способы справиться с этим, но я не вижу ситуации, когда вы сможете их реализовать и не сможете добавлять скрытые поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...