2011-07-05 61 views
2

我一直在嘗試使用「外部」文件(使用ashx處理程序從不同的服務器提供)作爲Razor中的佈局的日子(真的,日子)。如何使用RazorEngine加載外部佈局文件?

@{ 
    Layout = "http://someServer/templates.ashx?path=/my/template.cshtml"; 
} 

這給我一個關於路徑必須是虛擬路徑的錯誤。

我用盡了一切我能想到的:VirtualPathProviders,定製RazorViewEngines

沒有什麼幫助,也沒有人這樣做或有人可以給我一個提示?

+0

一個的VirtualPathProvider應該工作。傳遞給VPP的字符串仍然需要看起來像一個虛擬路徑。 – SLaks

+0

是的,問題是,VirtualPathProvider以某種方式覆蓋默認值,因此引擎會嘗試從外部位置( - >使用自定義VirtualPathProvider)加載所有視圖。 –

+0

將自定義VPP轉發到正常路徑爲默認路徑。 – SLaks

回答

1

設置一個處理虛擬路徑的VirtualPathProvider,該虛擬路徑以魔術記號開頭,並將所有其他路徑傳遞到其Previous property
例如:

public override VirtualFile GetFile(string virtualPath) { 
    if (virtualPath.StartsWith("~/MySpecialTemplateServer")) 
     return new MyServerVirtualFile(virtualPath); 
    else 
     return Previous.GetFile(virtualPath); 
} 
+0

這樣做。謝了哥們! –