2014-03-19 13 views
5

Ich versuche eine ServiceStack Razor Seite programmatisch auf dem Server zu rendern (damit ich sie per Email verschicken kann). Ich folge den Informationen auf https://groups.google.com/forum/#!topic/servicestack/RqMnfM73ic0 Post, aber wenn ich die "AddPage" -Methode mit einem gültigen Pfad für die cshtml-Datei aufrufen, fällt es um. Irgendwelche Ideen?Rendering einer ServiceStack Razor Ansicht programmatisch

var response = svc.Get(oReq); 

     var razor = TryResolve<RazorFormat>(); 
     var path = @"C:\GetOrderResponse.cshtml"; 
     var razorPage = razor.AddPage(path); 

Dies wirft ein Argument Exception mit der Meldung:

zweiten Pfadfragment kein Laufwerk oder UNC-Name sein muss. Parametername: path2

at System.IO.Path.InternalCombine(String path1, String path2) 
at System.IO.FileSystemEnumerableIterator`1.GetFullSearchString(String fullPath, String  searchPattern) 
    at System.IO.FileSystemEnumerableIterator`1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler`1 resultHandler, Boolean checkHost) 
    at System.IO.DirectoryInfo.InternalGetDirectories(String searchPattern, SearchOption searchOption) 
at ServiceStack.VirtualPath.FileSystemVirtualDirectory.EnumerateDirectories(String dirName) 
at ServiceStack.VirtualPath.FileSystemVirtualDirectory.GetDirectoryFromBackingDirectoryOrDefault(String dName) 
at ServiceStack.VirtualPath.AbstractVirtualDirectoryBase.GetFile(Stack`1 virtualPath) 
at ServiceStack.VirtualPath.AbstractVirtualDirectoryBase.GetFile(String virtualPath) 
at ServiceStack.VirtualPath.AbstractVirtualPathProviderBase.GetFile(String virtualPath) 
at ServiceStack.VirtualPath.MultiVirtualPathProvider.GetFile(String virtualPath) 
at ServiceStack.Razor.Managers.RazorViewManager.GetVirutalFile(String ospath) 
at ServiceStack.Razor.Managers.RazorViewManager.AddPage(String filePath) 
at ServiceStack.Razor.RazorFormat.AddPage(String filePath) 
+0

Versuchen Sie dies innerhalb eines ServiceStack-Dienstes zu tun? und existiert diese Seite bereits unter **/Views/**? – mythz

Antwort

7

Sie wahrscheinlich nicht wollen, um die Seite geben, die bereits hinzugefügt werden sollte, wenn es unter /Views/ ist. Stattdessen können Sie die vorhandene Seite nach Namen auflösen und sie in HTML rendern mit:

var razor = HostContext.GetPlugin<RazorFormat>(); 
var orderPage = razor.GetViewPage("GetOrderResponse"); 
email.BodyHtml = razor.RenderToHtml(orderPage, order); 
+0

Sie sind eine Legende wie immer. Danke vielmals. – Gumzle

+0

Hat das seit v4.0.15 gebrochen? Funktioniert gut, wurde über das Wochenende aktualisiert und GetPageByName findet jetzt keine Ansichten mehr. – Gumzle

+0

@Gumzle Funktioniert immer noch für mich. Erhalten Sie irgendwelche Startup-Fehler in '? Debug = requestinfo'. Siehe Debug-Informationen zum [RequestInfo-Plugin] (https://github.com/ServiceStack/ServiceStack/wiki/Debugging#request-info). – mythz