使用Razor生成静态HTML页面的示例是否存在?

3
我想通过RAZOR生成一个静态HTML页面,基本上是使用部分子页面的包含来实现。
以下是需要注意的事项:
1. 我已经尝试过T4,并正在寻找替代方法:请参阅这里这里
2. 这个答案说这是可能的,但没有具体的例子。
3. 我安装了Razor generator,因为我认为这是正确的方法,但我不知道如何使用它生成静态HTML。
最好的方法是创建一个完整的扩展程序,类似于T4概念的行为,但允许我使用RAZOR语法和HTML格式(格式问题基本上是我不使用T4的原因)。
2个回答

4
如果你想要编译 Razor 视图并生成 HTML,则可以使用类似以下代码:

如果你要对 Razor 视图进行编译并生成 HTML,那么你可以使用这样的代码。

public static string RenderViewToString(string viewPath, object model, ControllerContext context)
{
    var viewEngineResult = ViewEngines.Engines.FindView(context, viewPath, null);
    var view = viewEngineResult.View;


    context.Controller.ViewData.Model = model;

    string result = String.Empty;
    using (var sw = new StringWriter())
    {

        var ctx = new ViewContext(context, view,
                                  context.Controller.ViewData,
                                  context.Controller.TempData,
                                  sw);
        view.Render(ctx, sw);

        result = sw.ToString();
    }

    return result;
}

或者在ControllerContext之外http://razorengine.codeplex.com/


1
当前版本的Razor Generator具有“Generator”选项,当与“MvcHelper”生成器一起使用时,还会为辅助程序生成静态方法。
例如,在您的CSHTML文件顶部添加此行(当然,将Custom Tool Visual Studio属性设置为RazorGenerator):
@* Generator: MvcHelper, GeneratePrettyNames : true *@

漂亮的名称选项并不是必须的,但我觉得应该是默认的,以避免那些带有下划线的超长类名 :-)

正如您可能已经知道的那样,这种方法的主要好处是您可以在单独的程序集中共享您的辅助程序。这就是为什么我首先使用 Razor Generator 的原因。

即使在同一个程序集中,现在您也可以将代码留在 App_Code 文件夹之外。然而,这并不是最佳实践(至少对于安全性),而且 Visual Studio 设计器会感到困惑。它认为该方法仍然不是静态的,但实际上它是静态的,并且可以正常工作。

我正在同一站点/程序集的 App_Code 文件夹中原型化我的辅助程序,以提高速度,然后在测试完毕后将它们复制到共享组件中。我需要这个解决方案的原因是创建通用的 Bootstrap 辅助程序,而不是手动编写每个 HTML 片段的 HtmlHelper,例如与 @chrismilleruk 的 this solution 一起使用。

我想以后我可能需要将 CSHTML 帮助程序转换为手动编码的 HtmlHelper 以提高速度。但是,一开始可以看到开发速度的显著提高,因为可以复制和粘贴要自动化的 HTML 代码块,然后在相同的格式/编辑器中快速完善和调试它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接