1

我从 NuGet 获得了 Razor 引擎的 v2 版本。我想使用它的 API 即时编译 Razor 视图。但是,它似乎完全没有记录。

每个类型和成员都有以下文档:

此类型/成员支持 .NET Framework 基础结构,不打算直接从您的代码中使用。

这很烦人,因为这些都是公共类型和公共成员。
我已经看到了一些使用这个库编译 Razor 视图的 3rd 方的东西,所以我知道这个任务也应该是可行的。

那么,是否有任何关于如何在任何地方使用此 API 的实际可用文档?

4

1 回答 1

0

我把这个问题留了将近一年没有答案,所以我决定最终发布我想出的东西。

很明显,Razor 仍然没有记录,请参阅http://msdn.microsoft.com/en-us/library/system.web.razor%28v=vs.111%29.aspx我认为它很可能保持无证。

但是,通过查看 ASP.NET MVC 在其 Razor 视图引擎中如何使用它的代码,可以很容易地确定如何使用它。然后,您可以在此基础上编写代码。

Razor 似乎也与 ASP.NETBuildManager基础结构相关联,因此您可以通过它轻松获取 Razor 视图的实例。然后,您正在寻找调用该ExecutePageHierarchy方法。

这是代码:

public void ProcessRequestCore(HttpContextBase context)
{
    try
    {
        // Create Razor page instance
        var instance = BuildManager.CreateInstanceFromVirtualPath(_razorFilePath, typeof(WebPage)) as WebPage;

        if (instance == null)
            throw new NullReferenceException("BuildManager.CreateInstanceFromVirtualPath returned null.");

        // Set up things
        instance.VirtualPath = _virtualPath;

        // Render the Razor page
        instance.ExecutePageHierarchy(new WebPageContext(context, instance, _model), context.Response.Output);
    }
    catch (Exception exc)
    {
        Logger.WriteException(exc);
        context.Response.StatusCode = 500;
    }
}
于 2013-07-12T16:56:56.957 回答