Ist es möglich, den Razor Compiler programmatisch von einer Controller-Methode aus aufzurufen?

8

Ich benutze ASP.NET MVC 3 und ich habe ein interessantes Problem zu lösen, auf das ich hoffe, einen Rat zu bekommen.

Ich habe eine Seite, die eine Anzahl von divs enthält. Der Inhalt jedes Div ändert sich im Laufe der Zeit und so habe ich momentan einen Timer für jedes Div-Ausführen, das eine $ .ajax-Anfrage an den Server stellt, die ein PartialViewResult mit dem aktualisierten Inhalt des divs zurückgibt. Die Teilansicht ist ziemlich komplex und bezieht sich auf andere Ansichten.

Das Problem bei diesem Ansatz ist, dass er nicht sehr gut skaliert. Es kann sein, dass bei jedem Benutzer viele dieser Timer laufen und bei vielen Benutzern der Server ständig getroffen wird. Ich würde daher lieber eine einzige Anfrage an den Server richten, die möglicherweise mehrere div-Inhalte zurückgibt, so dass es wäre:

%Vor%

...

Dann könnte ich auf dem Client jedes HTML-Bit an der richtigen Stelle auf der Seite platzieren.

Ich dachte, dass ich JSON vom Server zurückgeben könnte, aber mein Problem ist - wie bekomme ich den HTML-Code? Im Moment wird der Rasiercompiler laufen und meine Teilansicht-cshtml-Dateien in HTML umwandeln, aber wenn ich JSON zurückgebe, ist es möglich, den Rasiercompiler programmatisch aufzurufen?

Ich habe Razor Engine hier gefunden: Ссылка , das scheint zu tun, was ich will, aber ist es möglich, es mit nur Vanille ASP NET zu tun MVC?

Oder gibt es angesichts des Problems einen besseren Weg, mein Ziel zu erreichen?

Danke für jede Hilfe!

    
kmp 20.12.2011, 14:30
quelle

3 Antworten

5

Erstellen Sie eine Aktion, die eine neue PartialView zurückgibt, die alle diese PartialViews rendert. z.B. eine Aktion:

%Vor%

mit einer Ansicht, die Folgendes enthält:

%Vor%

Weitere Informationen finden Sie Ссылка .

Auf diese Weise gibt es nur eine Anfrage und die Rendering-Engine wird von der richtigen Stelle aufgerufen, d. h. die Ansicht.

Dann können Sie mit dem Ergebnis nach den verschiedenen divs suchen und das HTML im Client ersetzen.

%Vor%

Wenn die Struktur Ihrer Seite dies zulässt, sollten Sie Folgendes verwenden: Ссылка (wie @Jorge sagt), um alle zu ersetzen das html mit einer Zeile.

%Vor%     
StuperUser 20.12.2011, 14:39
quelle
3

Sie könnten zwei Methoden haben - eine, die HTML zurückgibt und eine andere als JSON.

Oder erstellen Sie alternativ ein ActionResult, das an ein JsonResult delegiert wenn die Anfrage ist eine Ajax Anfrage , oder ein PartialViewResult ansonsten zB:

%Vor%     
Rich O'Kelly 20.12.2011 14:35
quelle
1

Warum Sie nur einen Ajax aufrufen und statt eines JSON-Objekts erwarten, senden Sie dem HTML-html mit einer Methode in Ihrem Controller von ActionResult daran, dass dieser Typ das HTML des View-Typs wie folgt zurückgibt

%Vor%

Und der Kunde hat das so genannt

%Vor%

oder

%Vor%

Sie können auch partielle Ansichten laden und in bestimmten Teilen Ihrer Ansicht mit jquery load rendern, was nicht mehr als ein Ajax namens

ist     
Jorge 20.12.2011 14:38
quelle