2016-06-24 12 views
0

Ich baue auf eine massive Razor-Website, die ich nicht umbauen kann. Ich muss AngularJs auf der Client-Seite verwenden, und wenn die Seite geladen wird, gibt es ein bisschen von der Server-Seite, die prepressessing ist, die getan werden muss, bevor die Seite gerendert wird.Zugreifen auf Abfragezeichenfolge mit Razor und AngularJs

Ich muss einen Parameter an C# über die URL-Abfrage-Zeichenfolge übergeben, und ich brauche den gleichen Parameter auf der JavaScript-Seite. Derzeit, wenn ich diese URL:

http://localhost:32289/razorPage.cshtml#/?param="1234"

ich diesen Wert auf der Seite JavaScript bekommen, aber wenn ich rufe

var queryString = HttpContext.Current.Request.QueryString;

auf der Serverseite, ist es leer. Außerdem, wenn ich diese URL:

http://localhost:32289/razorPage.cshtml/?param="1234"#/

kann ich den Abfrage-String auf der Server-Seite zuzugreifen, aber dann geht JavaScript Nüsse, als ob ich ständig den Code in meinem Eckige Controller rerunning wurde. Ich erhalte diese in der Chrome-Konsole:

Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.

Und schließlich einen Fehler, der die maximale Anrufstapelgröße sagt erreicht ist. Wenn ich einen console.log() in diesen Winkel-Controller einfüge, protokolliert er kontinuierlich, bis die maximale Größe des Aufruf-Stacks erreicht ist.

Das ist mein razorPage.cshtml:

@{ 
    Page.Title = "OCE Visualizer"; 
    Page.IsDetailedView = false; 
    Page.IsCapacity = false; 
    Page.IsEmbedded = false; 

    InitProvider.Init(); 
} 

<html> 
<!--...AngularJs App lives in here--> 
</html> 

Die init-Methode (die einige Daten Ordner auf dem Server auffüllt, so dass sie zu Angular bedient werden können) verwendet Parameter aus der Abfrage-String, wie auch die AngularJS App, die verwaltet auch sein eigenes Routing.

Ich bin relativ neu in Razor, aber ich kenne AngularJs. Ich denke, ein Teil des Problems könnte auf die Art und Weise zurückzuführen sein, in der .NET das Routing verwaltet, was mit der Art und Weise, wie Angular es tun kann, nicht klappt. Ich bin bewusst, this und this SO Antworten, aber sie gelten für eine MVC-App, wo meins ist nur eine Website mit vielen .cshtml Seiten, keine Controller s oder API s.

Gibt es eine Möglichkeit, auf Abfragezeichenfolgen in Angular und Razor C# zuzugreifen, während AngularJs-Routing mit "hübschen" URLs beibehalten wird?

Antwort

0

Ok, ich habe eine Lösung gefunden. Ich poste es, wenn Leute in der Zukunft dieses Problem haben, oder wenn es eine schlechte Antwort ist und Leute es reparieren können.

Ich erkannte, dass der Hauptunterschied zwischen den zwei URLs in meiner Frage der Speicherort der #, die eine Fragmentkennung (?) Ist. Ich habe darüber gelesen here, aber ich könnte vorsichtig sein, dass diese Seite fast 20 Jahre alt ist. Wie auch immer, ich habe festgestellt, dass der Fragmentteil der URL NICHT an den Server gesendet wird, weshalb ich die Seite des Abfragezeichenfolgeservers nicht analysieren konnte, als sie hinter der war. Ich weiß nicht, warum JavaScript ausflippte, als die Abfrage vor der # war, aber ich bin bereit zu glauben, dass es ein Problem mit meinem Code war.

Die Lösung bestand darin, die Abfragezeichenfolge auf beiden Seiten der übergeben.So sieht die Arbeits URL wie folgt aus:

http://localhost:32289/razorPage.cshtml?param="1234"#/?param="1234"

Der Query-String auf der linken Seite ist, was das C# zugreifen können, und die auf der rechten Seite ist das, was AngularJS zugreifen können. Außerdem funktioniert alles nach dem # wie normales AngularJs Routing, also glaube ich nicht, dass das verwandt war.

+0

Wenn Sie Ihren JS-Code dort posten, wo Sie versuchen, Daten von der URL abzurufen, kann möglicherweise jemand helfen. –

Verwandte Themen