Laden...

[JavaScript] If-Abfrage gibt falsches Ergebnis aus

Erstellt von kunsti vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.783 Views
K
kunsti Themenstarter:in
89 Beiträge seit 2013
vor 9 Jahren
[JavaScript] If-Abfrage gibt falsches Ergebnis aus

Hallo liebes Forum,
ich fange gerade an mir selbst zu zweifeln.
Ich bin an eriner Asp.Net MVC Applikation.
In eriner View wird bei einem onclick event geprüft, ob ein Button gedrückt wurde oder nicht.
In der LAyoutView habe ich ein onbeforeunload Event erstellt, welches den Benutzer ausloggen soll, falls er eingeloggt ist. Dies funktioniert an sich gut, allerdings wird er auch ausgeloggt, sollte der Benutzer auf einen Button drücken.
Aus diesem Grund möchte ich anhand einer Variable in einem Model überprüfen, ob ein Benutzer eingelogt wurde oder nicht.
Das PRoblem ist, dass der Benutzer auch nicht eingelogt sein kann und das Model dann null ist.
Aus diesem Grund versuche ich mit einer if zu überprüfen ob das Modell null ist.


if(!(@ViewData.Model == null))
                {
                    if( @ViewData.Model.s == "NoButton")
                    {
                        //Do stuff
                    }
}

Habe bereits auch versucht das ganze auf undefined zu prüfen hatte statt "!(@ViewData.Model == null)" "(@ViewData.Model != null)" versucht. Allerdings springt das script in den if-Block, und wirft da logischerweise eine NullReferenceException.

Bin ich gerade einfach zu blöd etwas offensichtliches zu sehen?

Viele Grüße

16.841 Beiträge seit 2008
vor 9 Jahren

Das ist kein Javascript, das nennt sich Razor. Und da gibt es kein undefined.
Und auch gibt es im Razor kein Script.Block.
Also was genau hast Du und was willst Du erreichen?

2.207 Beiträge seit 2011
vor 9 Jahren

hallo kunsti,

auch wenn ich nicht ganz verstanden habe, was du machen willst: ViewData-Props erhält man mit "ViewData["MyProperty"]"

Benutze besser ViewModels, die kannst du mit "@Model.MyProperty" erreichen.

Gruss

Coffeebean

K
kunsti Themenstarter:in
89 Beiträge seit 2013
vor 9 Jahren

Danke für die Antworten.
Ich habe in meinem body-tag das Event onbeforeunload. Dieses ruft folgende Funktion auf.


<script type="text/javascript">
        function logOffFunction() {
            var v = window.location.pathname        
            {
                if(!(@ViewData.Model == null))
                {
                    if( @ViewData.Model.s == "NoButton")
                    {
                        alert("LOgOFF");
                    }
                    else
                    {
                        alert("No LOgOFF");
                    }
                }
                else
                {
                    alert("No LOgOFF");
                }
            }
            else
            {
                alert("No LOgOFF");
            }

        }

Also mein Ziel ist es den Benutzer automatisch auszuleggen, wenn das Fenster geschlossen wird.
Dies habe ich, da es mehrere Views geben kann im Layout gemacht, damit es für alle Views gilt.
Problem ist, dabei jetzt aber, dass der Benutzer auch ausgeloggt wird, wenn er sich einlogt, da das Event ebenfalls aufgerufen wird. Auch wenn er auf einen Button klickt, der eine Action in einem Controller ausführt. Aus diesem Grund setzte ich beim klicken auf einen Button die Property auf true, andernfalls auf false.
Da das Model allerdings auch null sein kann, zum Beispiel, wenn ich mich auf der Login Seite befinde möchte ich prüfen, ob es null ist und den Benutzer nur dann auslogen.
Das Problem ist, dass in den if-Block gesprungen wird, obwohl Model null ist. Und ich verstehe nicht wieso.

Auch wenn ich nur Model, verwende ist es weiterhin null und das Problem mit der if-Abfrage bleibt bestehen.

5.658 Beiträge seit 2006
vor 9 Jahren

Hi kunsti,

nocheinmal: @ViewData.Model ist C#, der Rest ist JavaScript. C# läuft auf dem Server, JavaScript auf dem Client. Schau dir mal den HTML-Source der Seite im Browser an, dort wird aus if (@ViewData.Model == null) sowas wie if (null == null). Hier geht es wirklich um Grundlagen der Web-Entwicklung.

Christian

Weeks of programming can save you hours of planning

K
kunsti Themenstarter:in
89 Beiträge seit 2013
vor 9 Jahren

Ok, hatte mir zwar schon mehrere Sachen angeschaut, aber anscheinend immer noch nicht verstanden.
Danke schon mal.
Habe eben mal geschaut, was im Code der Website


 if(!(GateControl.Models.GatesModel == null))
                {
                    
                }

Aber dann ist es doch immer noch komisch, dass in die if gesprungen wird oder?
Wenn aus

if (@ViewData.Model == null) sowas wie if (null == null) wird, dann dürfte da doch auch nicht reingesprungen werden oder?
null == null = true, negiert ergibt es dann also false...

16.841 Beiträge seit 2008
vor 9 Jahren

Du kannst keine C# Elemente in Javascript verwenden.
Dein ViewModel ist aber C#.

Schau Dir de Unterschied zwischen Server- und Clienttechnologie an.

5.658 Beiträge seit 2006
vor 9 Jahren

Wenn aus

if (@ViewData.Model == null) sowas wie if (null == null)
wird, dann dürfte da doch auch nicht reingesprungen werden oder?

Das ist doch kein Rätselraten, das kannst du einfach ausprobieren! Du kannst dein Projekt in VisualStudio debuggen und auch für den JavaScript-Code gibt es im Browser einen Debugger (F12 bzw. Entwicklerwerkzeuge).

Christian

Weeks of programming can save you hours of planning

K
kunsti Themenstarter:in
89 Beiträge seit 2013
vor 9 Jahren

Ich weiß ja dass er reinspringt, mich hatte nur gewundert wieso.
Aber egal. Ich habe jetzt den Razor Code von Java Code getrennt, jetzt gibt es an einer anderen Stelle noch ein paar Verständnisprobleme, aber mal sehen, ob ich das so hin bekomme.

Danke für Antworten.