2015-10-23 44 views
16

我有幾個網站正在構建,它們在頁面中顯示相同或相似的數據。爲了減少代碼重複,我所做的是創建了第三個項目/網站,並認爲我將它用作共享HTML,java腳本,CSS,圖像等的位置。如何在ASP.NET MVC4項目之間共享HTML

我能夠包含JavaScript, CSS和使用相對路徑的共享項目中的圖像很好。但是我無法呈現HTML的部分頁面。當試圖訪問這兩個網站,正在嘗試使用這樣的代碼加載部分頁面:

@RenderPage("/SharedArtifacts/Views/MySharedViewscshtml") 

我得到如下回應:

The virtual path '/SharedArtifacts/Views/MySharedViewscshtml' maps to another application, which is not allowed. 

現在我一派,並使用~前綴試過指定解決問題的路徑的根,但無濟於事...仍然是相同的錯誤。

有關如何解決此問題的任何想法?

+4

[編譯您的asp.net的MVC剃刀意見到一個單獨的DLL(http://www.chrisvandesteeg.nl/2010/11/22/embedding-pre-compiled-razor-views-in - 你的dll /) –

+2

我會看看創建你自己的NuGet包和飼料,並分享你的項目中的意見。 Feed可以像文件系統上的文件夾位置一樣簡單。 – SimonGates

+0

嗯。有點困惑這不是本地支持。我會認爲在不同的項目/網站之間共享常見的HTML是一件常見的事情 – mike01010

回答

5

我們一直這樣做。簡單的(非編程)方法是在IIS中創建虛擬文件夾,映射到所有伴隨網站共有的共享文件夾。我們通常爲錯誤結果頁面和其他通用內容執行此操作。

/Views/SharedVirtual/somefile.ascx

路徑/Views/SharedVirtual通過IIS的虛擬文件夾映射。然後在控制器中,我們可以做一個return View("/Views/SharedVirtual/somefile.ascx",somemodel);。它也適用於RenderPartial。

本地使用這些項目,當我使用mklink來創建映射到共享文件夾常見的項目文件夾中的結點。這種方式VS認爲該文件夾是本地的,而不是它可以在本地運行項目進行調試。

我們通常不使用剃刀,但由於概念應該只是同它不是VS那是做共享映射,它的操作系統和IIS是。

一個需要注意的是,如果你編輯的意見,他們將在所有項目中改變,所以你一定要小心了您的修改,以便確保所有引用它們的項目中使用時,他們將是兼容的。

+0

謝謝@Wolfie。那麼你能否爲我確認一下,用於本地目的的mklink會位於該項目下通常的〜/ Views路徑下,其餘的視圖在哪裏(在它們各自的子文件夾中)?在Visual Studio中發佈這個安裝程序的任何問題?我不能立即確定我可以期待什麼樣的障礙 - 共享虛擬文件夾對我們來說是全新的。 –

+0

是的。使用mklink將地圖文件夾安裝到項目的\ Views文件夾中。右鍵單擊VS項目瀏覽器中的鏈接文件夾,然後單擊「排除」。發佈你想要的一切。 – Wolfie

3

您想渲染的視圖位於Web應用程序根目錄之外。至少出於安全原因,這是不允許的。

但是,您可以做的是通過選擇「嵌入爲資源」構建操作而不是默認構建操作,將veiws(.cshtml)嵌入爲資源。然後,使用NuGet包管理器安裝和使用虛擬路徑提供能夠呈現已經嵌入的觀點一樣herehere,或here的。

0

ASP.NET MVC將在相同的程序集中查看該視圖。將視圖或HTML放在不同的程序集中對於框架來說很笨拙。在內部,我不認爲框架支持在程序集範圍之外查看View/HTML。您可能需要編寫一些自定義代碼或擴展框架,它的開源代碼。