Laden...

ASP.NET JavaScript Zugriff auf Sessionvariablen

Erstellt von impact_1991 vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.475 Views
I
impact_1991 Themenstarter:in
44 Beiträge seit 2010
vor 7 Jahren
ASP.NET JavaScript Zugriff auf Sessionvariablen

Hallo zusammen,

aktuell bin ich dabei eine ASP.NET Anwendung zu entwickeln. An einer Stelle ist es nun erforderlich einen Wert in der Session über JS zu setzten. Wenn ich den JS Block direkt im aspx File hinterlege klappt alles super.
Sobald ich das Skript aber auslagere und anschließend einbinde funktioniert der Code nicht mehr bzw. es ändert sich das verhalten des Codes.



<%@ Master Language="C#" AutoEventWireup="true" CodeFile="SiteBaseSingle.master.cs" Inherits="SiteBaseSingle" ViewStateMode="Disabled" %>
<!DOCTYPE html>
<script language="javascript" type="text/javascript">
    function LogOut()
    {
        <%Session["TestValue"] = ""; %>';
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>
        <asp:ContentPlaceHolder ID="PageTitlePartPlaceHolder" runat="server"></asp:ContentPlaceHolder><%=" Test"%>
    </title>
    <link href="Content/Css/GGO.css" rel="stylesheet" />
    <script src="Content/Scripts/Helper.js"></script>
    <link href="Content/Css/GGO.css" rel="stylesheet" />
        
</head>
<body>
    <form id="form1" runat="server">
        <dx:ASPxGlobalEvents ID="GlobalEvents" runat="server">
            <ClientSideEvents ControlsInitialized="OnControlsInitialized" />
        </dx:ASPxGlobalEvents>
        
        <div class="header">
            <div class="contentBox">
                <uc:Header runat="server" ID="Header" />
            </div>
        </div>
        <div class="content" ">
            <div class="contentBox">
                <asp:ContentPlaceHolder ID="ContentPlaceHolder" runat="server">
                </asp:ContentPlaceHolder>
            </div>
        </div>

        <div class="footerHolder">
            <footer class="footer">
                <div class="contentBox">
                    <uc:Footer runat="server" ID="Footer" />
                </div>
            </footer>
        </div>
    </form>
</body>
</html>


Dieser Code setzt beim Aufruf die Sessionvariable zurück


<%@ Master Language="C#" AutoEventWireup="true" CodeFile="SiteBaseSingle.master.cs" Inherits="SiteBaseSingle" ViewStateMode="Disabled" %>
<!DOCTYPE html>

<script src="Content/Scripts/testscript.js"></script>    
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>
        <asp:ContentPlaceHolder ID="PageTitlePartPlaceHolder" runat="server"></asp:ContentPlaceHolder><%=" - Test"%>
    </title>
    <link href="Content/Css/GGO.css" rel="stylesheet" />
    <script src="Content/Scripts/Helper.js"></script>
    <link href="Content/Css/GGO.css" rel="stylesheet" />
        
</head>
<body>
    <form id="form1" runat="server">
        <dx:ASPxGlobalEvents ID="GlobalEvents" runat="server">
            <ClientSideEvents ControlsInitialized="OnControlsInitialized" />
        </dx:ASPxGlobalEvents>
        
        <div class="header">
            <div class="contentBox">
                <uc:Header runat="server" ID="Header" />
            </div>
        </div>
        <div class="content" ">
            <div class="contentBox">
                <asp:ContentPlaceHolder ID="ContentPlaceHolder" runat="server">
                </asp:ContentPlaceHolder>
            </div>
        </div>

        <div class="footerHolder">
            <footer class="footer">
                <div class="contentBox">
                    <uc:Footer runat="server" ID="Footer" />
                </div>
            </footer>
        </div>
    </form>
</body>
</html>


    function LogOut()
    {
        <%Session["TestValue"] = ""; %>';
    }

Beim auslagern und debuggen dieses Codes, kann anscheinend nicht mehr auf die Variable zugegriffen werden. Beim ausgeben der Variable ist der Code als String zu sehen und nicht der Inhalt.

Kann mir jemand von euch erklären, warum es zu diesen Verhalten kommt.

Vielen Dank
Johannes

16.806 Beiträge seit 2008
vor 7 Jahren

Du arbeitest mit ASP.NET WebForms, dessen Weiterentwicklung vor rund 2 Jahren eingestellt wurde.
Sicher, dass Du auf dieser Basis jetzt eine neue Anwendung mit einer toten Technologie anfangen willst?

Der Nachfolger von ASP.NET WebForms ist ASP.NET MVC und der Nachfolger von ASP.NET MVC ist ASP.NET Core.

I
impact_1991 Themenstarter:in
44 Beiträge seit 2010
vor 7 Jahren

Hallo Abt,

ja ich weiß ASP.NET WebForms ist alt und nicht wirklich schön. Allerdings habe ich die Anwendung in ca. 10h geschrieben und dafür ist es noch ok. Eine Einarbeitung in neue Technologien hätte dafür einfach zu lange gedauert.
Das setzen der Session ist das einzige das noch fehlt. bzw. was ich gern noch geändert haben wollte.

Beste Grüße

3.170 Beiträge seit 2006
vor 7 Jahren

Hallo,

<%Session["TestValue"] = ""; %>';

Das kann nur innerhalb des aspx-Codes selbst funktionieren, da es einen serverseitigen Ausdruck enthält, der mit der Seite geparst und serverseitig(!) ausgewertet wird.
Wenn Du den Javascript-Code auslagerst in eine eigene Datei, wird diese so wie sie ist einfach an den Client ausgeliefert und der Ausdruck wird auf dem Server nicht ausgewertet.

Schau Dir dazu auch mal den Scriptcode an, der bei den beiden Varianten auf dem Client landet.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

D
115 Beiträge seit 2006
vor 7 Jahren

Hallo,

also ich kann deinen Ansatz mit WebForms verstehen. Auch wenn es unter den Programmierern als veraltet gilt ist die Anfangshürde damit am geringsten und man kann das Projekt erstmal umsetzen.
Aber irgendwie sieht das so aus, als sollte das Login über eine Session-Variable gesteuert werden. Da würde ich dir von abraten, es gibt die fertige FormsAuthentication, die Dir da deutlich mehr bringt.

In deiner LogOut-Funktion hast Du das Problem, das Du versucht, serverseitigen Code direkt im JavaScript auszuführen. Das geht aber nicht. Du musst eine Anfrage an den Server senden, bei deren Verarbeitung die Session auch ändern kannst. Dies würde ich über einen Webservice (.asmx) machen und diesen per jQuery mit $.Ajax() aufrufen.