2017-03-24 6 views
0

Ist es möglich, eine JavaScript-Funktion aufzurufen, wenn ein Benutzer erfolgreich zu einer neuen Ansicht umgeleitet wurde?Rufen Sie Javascript auf RedirectToAction

ich versucht haben, die folgenden-

C#

if (Session["UserId"]) 
{ 
     return RedirectToAction("LoggedIn"); 
} 

cshtml

@if (Session["UserId"] != null) 
{ 
    <script>$('#btnTest').click();</script> 

} 

schlägt mit

JavaScript runtime error: '$' is undefined 

Ich habe jQuery im Projekt referenziert und es nur mit einem Knopfklick getestet und das funktioniert aber das obige ist fehlgeschlagen. Wie kann ich das erreichen?

+0

Wie sieht das gerenderte Markup (html auf der Client-Seite) aus? und wo bezieht es sich auf jQuery? weil die Warnung allein keine Bibliothek erfordert. – dlatikay

+0

Ihre Frage ist nicht klar. – Liam

+0

Wahrscheinlich wird dieser HTML-Code eingefügt, bevor jQuery tatsächlich aufgerufen wird. Wenn Sie beispielsweise bis zum abschließenden body-Tag nicht auf jQuery verweisen, wird dies ausgeführt, bevor jQuery existiert. –

Antwort

0

Wahrscheinlich wird dieser HTML-Code eingefügt, bevor jQuery tatsächlich referenziert wird. Wenn Sie beispielsweise jQuery bis zum schließenden body-Tag nicht referenzieren (wie Sie sollten), wird dies ausgeführt, bevor jQuery tatsächlich existiert. Der beste Weg, um mit dieser Art von Sache umzugehen, ist mit Abschnitten. Sie können in Ihrem Layout einen Abschnitt für Skripts definieren und dann sicherstellen, dass dieser Abschnitt unter den erforderlichen Abhängigkeiten wie jQuery liegt.

_Layout.cshtml

<script src="/path/to/jquery.js"></script> 
    @RenderSection("Scripts", required: false) 
</body> 

AwesomeView.cshtml

@section Scripts 
{ 
    @if (Session["UserId"] != null) 
    { 
     <script>$('#btnTest').click();</script> 
    } 
} 

Diese im folgenden HTML führt generiert wird (vorausgesetzt, die Session-Variable nicht null ist natürlich:

<script src="/path/to/jquery.js"></script> 
    <script>$('#btnTest').click();</script> 
</body> 

Es ist wichtig zu beachten, dass dies nur mit Standardansichten funktioniert. Teilansichten können keine Abschnitte definieren. Wenn Sie also ein wenig Skript in ein Teil einfügen müssen, müssen Sie einen anderen Ansatz für die Verschiebung der Ausführung wählen. Im Allgemeinen ist die beste Methode, an diesem Punkt einfach window.onload direkt nutzen:

var onload = window.onload 
window.onload = function() { 
    onload(); 
    // your code here 
} 

Das sollte sicherstellen, dass jQuery bereits geladen wurde. Es ist jedoch wirklich besser, JS-Code in Partials überhaupt nicht zu verwenden. Es gibt eine Reihe von Problemen, die dazu führen können, dass Ihr Code im Allgemeinen sehr fragmentiert und brüchig wird.

Verwandte Themen