如何通过它的完整文件位置获取任何视图的Html

时间:2015-12-02 13:26:14

标签: asp.net asp.net-mvc asp.net-mvc-4 razor viewengine

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

1 个答案:

答案 0 :(得分:0)

您可以实施VirtualPathProvider。创建一个继承自VirtualPathProvider的类,然后重写两个方法:

  • FILEEXISTS
  • 的GetFile

这些方法接受虚拟路径参数,然后您可以将其映射到磁盘上的某个位置。您的控制器将不知道此提供程序存在(它们继续使用视图的虚拟路径)。您可能还需要实施VirtualFile

有关详细信息,请参阅http://www.umbraworks.net/bl0g/rebuildall/2009/11/17/ASP_NET_MVC_and_virtual_views。此博客文章是从数据库中获取视图,但您可以从任何地方将其调整为源视图。