SessionJavaScript jest językiem klienckim i wywołuje się on po stronie przeglądarki.Naturalnie w JavaScript nie możemy uzyskać dostępu do zmiennej sesyjnej ASP.NET. Istnieją jednak pewne sposoby do uzyskania zmiennej sesyjnej i jej wyświetlenie po stronie JavaScript.
O ile wyświetlenie zmiennej sesyjnej po stronie JavaScript może mieć jeszcze sens to jej zapis już nie tak bardzo. Jeśli chcesz coś koniecznie zapisać po stronie JavaScript lepiej użyć ciasteczek.
Mimo to zaprezentuje w tym wpisie jak odczytać i zapisać zmienną sesyjną.
Odczyt zmiennej sesyjnej
Z pobraniem zmiennej sesji nie ma problemu. Oto kod który wyświetli zawartość sesji pod kluczem”test” i “MyText”.
function showSession() { <%Session["Test"] = "Cześć Stefan";%> var sessionValue = '<%=Session["Test"]%>'; alert(sessionValue); } function showMySession() { alert('<%=Session["MyText"]%>'); }
Używając osadzonego bloku kodu C# zawartość zmiennej sesyjnej zostanie wygenerowana do pliku HTML ,a później ta wartość zostanie wyświetlona przez JavaScript.
Oto kod HTML.
<input onclick="showSession(); return false;" type="button" value="Pokaz sesje" /> <br /><br /> <asp:TextBox runat="server" id="txtUText"/> <asp:Button Text="Zapisz to do Sesji" runat="server" OnClick="Unnamed1_Click" /> <br /><br /> <input onclick="showMySession(); return false;" type="button" value="Pokaz co zapisałem" />
Przycisk “pokaż sesje” wyświetli klucz sesji “test”. Jest on zapisywany przy każdy ładowaniu strony.
Może także zapisać zmienną sesyjną po stronie serwera z przeładowaniem przyciskiem i “zapisz to do sesji” i wyświetlić ja potem po stronie JavaScript. innym przyciskiem
Oto kod C# który się wywołuje gdy naciśniemy przycisk “zapisz to do sesji”.
protected void Unnamed1_Click(object sender, EventArgs e) { Session["MyText"] = txtUText.Text; txtUText.Text = string.Empty; }
Pod przyciskiem “pokaz co zapisałem” możesz sprawdzić wartość którą przekazałeś poprzednio.
Zapis wartości do sesji
Powinienem zadać ci pytanie po co chcesz z poziomu JavaScript zapisywać wartość do sesji. Ten pomysł ukazuje ,że coś jest nie tak z twoją aplikacją internetową.
Musimy z korzystać z PageMethods i Ajax-u. JavaScript wywoła zapytanie Ajaxowe do serwera i bez odświeżania strony zmienna sesyjna ulegnie zmianie.
<script type="text/javascript"> function InitializeRequest(text) { PageMethods.SetTextToSession(text); } function showSession() { var sessionValue = '<%=Session["setVariable"]%>'; alert(sessionValue); } </script>
Kod HTML. Korzystamy z mechanizmu pagemethods więc do strony zostaje dodana kontrolka “ScriptMenager” z właściwością “EnablePageMethods” na “true”.
Można wywoływać metody “pageMethods” bez tego korzystają z Jquery ,ale uprośćmy ten przykład ,aż do bólu. Jeśli jednak ciebie to interesuje zrobiłem o tym wcześniej wpis.
<asp:ScriptManager ID="scriptMenager" EnablePageMethods="true" runat="server" ScriptMode="Release" LoadScriptsBeforeUI="true"></asp:ScriptManager> <input onclick="InitializeRequest('Jest tutaj jak jest poprostu i dobrze o tym wiesz'); return false;" type="button" value="SetSessionVariable" /> <input onclick="showSession(); " type="button" value="Pokaż czy ustawienie działa" /> <br /> <asp:Button runat="server" Text="Odśwież strone" />
Strona zawiera trzy przyciski. Przycisk “SetSessionVariable” bez przeładowywanie strony zapisze zawartość'Jest tutaj jak jest po prostu i dobrze o tym wiesz' do zmiennej sesyjnej.
Deklaracja Web-Metody wygląda tak.
using System; using System.Web.UI; namespace SessionJavaScriptGetSet { public partial class SetSessionVariable : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { var f = Session["setVariable"]; } [System.Web.Services.WebMethod] public static string SetTextToSession(string text) { Page objp = new Page(); objp.Session["setVariable"] = text; return text; } } }