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 :(得分:0)
您可以实施VirtualPathProvider
。创建一个继承自VirtualPathProvider
的类,然后重写两个方法:
这些方法接受虚拟路径参数,然后您可以将其映射到磁盘上的某个位置。您的控制器将不知道此提供程序存在(它们继续使用视图的虚拟路径)。您可能还需要实施VirtualFile
。
有关详细信息,请参阅http://www.umbraworks.net/bl0g/rebuildall/2009/11/17/ASP_NET_MVC_and_virtual_views。此博客文章是从数据库中获取视图,但您可以从任何地方将其调整为源视图。