2015-12-02 48 views
0
public string GetRazorViewAsString(string filePath, object model = null) 
{ 
     var resultString = new StringWriter(); 

     var context = new HttpContextWrapper(HttpContext.Current); 
     var routeData = new RouteData(); 

     // Creatign the controller context 
     var controllerContext = new ControllerContext(new RequestContext(context, routeData), new DummyController()); 

     // Rebdering the view and getting the html to resultString 
     var razor = new RazorView(controllerContext, filePath, null, false, null); 
     razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), resultString), resultString); 

     // Returning the generated html 
     return resultString.ToString(); 
} 

public class DummyController : Controller { } 

目前,我們正在使用上面的代碼來爲視圖生成HTML。 因此,查看路徑是一條虛擬路徑。如何通過它的完整文件位置獲得任何視圖的Html

現在,我們計劃將視圖移到項目之外。所以保持虛擬路徑現在是不可能的。

是否有通過採取視圖的全路徑

+0

如果你看看NuGet中的MVC包,你會發現它依賴於Razor包。如果你看看這個Razor包,你會發現另一個項目依賴於它,並且該項目能夠做你想做的事。做一點研究,我想你會找到它。 – mason

+0

當然@mason。但目前時間不多了。所以,檢查是否有人面臨同樣的事情。所以它會更快。並且也沒有Microsoft.AspNet.Razor的依賴關係,因爲我在NuGet中看到 –

+0

僅僅因爲時間不夠而並不意味着您無法進行充分的研究。我想你會發現你要找的東西,如果你谷歌「asp.net剃鬚刀到html庫」 – mason

回答

0

您可以實現一個VirtualPathProvider創建HTML的任何方式。創建從VirtualPathProvider繼承的類,然後覆蓋兩個方法:

  • FILEEXISTS
  • 的GetFile

這些方法接受一個虛擬路徑參數,然後你就可以映射到磁盤上的某個位置。您的控制器將不知道此提供程序存在(他們繼續使用虛擬路徑查看)。您可能還需要執行VirtualFile

欲瞭解更多信息,請參閱http://www.umbraworks.net/bl0g/rebuildall/2009/11/17/ASP_NET_MVC_and_virtual_views。這篇博客文章是從數據庫中採集視圖,但您可以從任何地方將其調整爲源視圖。

相關問題