2015-12-02 52 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。这篇博客文章是从数据库中采集视图,但您可以从任何地方将其调整为源视图。

相关问题