繁体   English   中英

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

[英]Is there an example on using Razor to generate a static HTML page?

我想通过RAZOR生成一个静态HTML页面,基本上是通过使用部分子页面的包含。

  1. 我也试过T4,并寻找替代方案:看到这里这里
  2. 这个答案说它是可能的 - 但没有具体的例子
  3. 我已经安装了Razor生成器,因为我认为这是要走的路,但我不知道如何用这个生成静态HTML。

最好是一个完整的扩展,其行为类似于T4概念,但允许我使用RAZOR语法和HTML格式 (格式问题基本上是我不使用T4的原因)。

如果您正在尝试使用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/

Razor Generator的当前版本具有“Generator”选项,当与“MvcHelper”发生器一起使用时,也会为助手生成静态方法。

例如,将此行添加到CSHTML文件的顶部(当然,自定义工具Visual Studio属性设置为RazorGenerator):

@* Generator: MvcHelper, GeneratePrettyNames : true *@

漂亮的名字选项并不是绝对必要的,但我觉得应该是默认的,以避免那些带有下划线的疯狂长类名:-)

您可能已经知道,此方法的主要好处是您可以在单独的程序集中共享助手。 这就是我首先使用Razor Generator的原因。

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

我在同一站点/程序集的App_Code文件夹中对我的助手进行原型设计以获得速度,然后在测试时将它们复制到共享组件。 我需要这个解决方案的原因是创建通用的Bootstrap助手,而无需在HtmlHelper中对每个HTML进行手工编码,即与@chrismilleruk的此解决方案一起使用。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM