【问题标题】:How to get Html of any view by it's full file location如何通过其完整文件位置获取任何视图的 Html
【发布时间】:2015-12-02 13:26:13
【问题描述】:
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

【问题讨论】:

  • 如果您查看 NuGet 中的 MVC 包,您会发现它依赖于 Razor 包。如果您查看该 Razor 包,您会发现另一个项目依赖于它,并且该项目能够执行您想要的操作。做一点研究,我想你会找到的。
  • 当然@mason。但目前时间不多了。因此,检查是否有人面临同样的事情。所以会更快。而且我在 NuGet 中看到的 Microsoft.AspNet.Razor 也没有依赖项
  • 仅仅因为你的时间不够用并不意味着你不能做足够的研究。我想如果你用谷歌搜索“asp.net razor to html library”,你会找到你要找的东西
  • 是的..我们已经在这样做了

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


【解决方案1】:

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

  • 文件存在
  • 获取文件

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

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

【讨论】:

    猜你喜欢
    • 2016-02-07
    • 2014-06-08
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    相关资源
    最近更新 更多