1

我正在使用 ServiceStack 来呈现我的 Markdown,但是我正在以编程方式进行我所追求的。基本上我的代码如下所示:

//MarkdownRenderer.cs
var rootPath = HttpContext.Current.Server.MapPath("~/");
var format = new MarkdownFormat { VirtualPathProvider = new PathProvider() };
var pageTitle = "Test for StackOverflow";
var pageContent = "Foobar";
var page = new MarkdownPage(format, rootPath, pageTitle, pageContent)
{
    Template = "~/_Layout.cshtml"
};
format.AddPage(page);
var view = new Dictionary<string, object>
{
    {"PageTitle", pageTitle},
    {"ArrayData", new[]{"abc","def"}}
};
var html = format.RenderDynamicPageHtml(pageTitle, view);

我有一个这样的 Markdown 页面:

//_Layout.cshtml
<!DOCTYPE html>
<html>
    <head>
        <title><!--@PageTitle--></title>
    </head>
    <body>
        <div>
        @foreach var item in ArrayData {
            - @item
        }
        </div>
        <div><!--@Body--></div>
    </body>
</html>

@Body 标记完全按预期填充,@PageTitle 标记也是如此。我现在希望能够使@foreach 代码正常工作,并且从可用的文档中我无法解决。问题是我的语法吗?我是否需要将代码转储到一个单独的文件中,然后单独编译,然后将其结果注入我的降价页面,就像我做 @SwapVariables 一样?

任何和所有帮助将不胜感激,如果您有任何问题,请提出。

4

1 回答 1

1

您正在将ServiceStack 的 MVC Razor 支持Markdown Razor 格式混合。ie 任何以.cshtml结尾的都是 MVC Razor 页面,而只有以.md结尾的页面被处理为 Markdown Razor 页面。

在 Markdown Razor 中,布局/模板页面通常被命名default.shtml,并且只是一个支持替换变量占位符的静态 HTML 页面,例如,只有以.md<!--@Body-->结尾的 Markdown 页面(即不是 HTML 模板)才能作为 Markdown Razor 处理。

这是一个独立 Markdown Razor 程序的示例,而这是一个使用 ServiceStack 的 MVC Razor 支持的独立示例

于 2013-01-17T13:10:53.790 回答