基于DTO类型的Razor Markdown不使用_Layout.cshtml

时间:2013-03-26 16:10:46

标签: razor markdown servicestack

我正在使用ServiceStack Markdown Razor渲染DTO,但它没有使用_Layout.cshtml。我遵循惯例,其中Markdown文件的名称与响应类型相同。

我的源代码树如下所示:

Services/
    ExampleService.cs
Transfer/
    Example.cs
Views/
    Shared/
        _Layout.cshtml
    Example.md

ExampleService.cs

public class ExampleService : IService
{
    public Example Get(ExampleRequest request)
    {
        return new Example { Greeting = "Hello, MD!" };
    }
}

因此,如果我访问.../html/reply/ExampleRequest,我会看到呈现的Markdown可以访问@Model。但是,它不使用可用的_Layout.cshtml(即使我将它移动到同一目录)。

支持吗?如果是这样,它是如何配置的?

2 个答案:

答案 0 :(得分:1)

自动使用最近的_Layout.cshtml

我不知道这是否再受支持了。看来/Views/Shared/_Layout.shtml是用作默认模板的文件。定义布局/模板页面的另一个选项是使用上面提到的@Layout或@template语法。

不支持@RenderBody(),

正确。这是故意的here

而不是使用像@RenderBody()这样的魔术方法,我们将输出视图视为另一个将输出a存储在名为“Body”的变量中的变量。

答案 1 :(得分:0)

在Markdown文件的顶部包含 @Layout 指令。

此外,在_Layout.cshtml文件中使用<!--@Body-->而不是@RenderBody()。这显示如下,并在Markdown Features页面的“布局/主页方案 - 基础知识”部分下进行了描述。

<强> Example.md

@Layout Views/Shared/_Layout.cshtml

## @Model.Greeting
It is the year @DateTime.Now.Year

<强> _Layout.cshtml

<!doctype html>
<html lang="en-us">
<head>
    <title>Markdown Razor Example</title>
</head>
<body>
    <!--@Body-->
</body>
</html>

<强>编辑

尽管如此,这种方法是不可取的,因为它偏离RazorRockstars示例中使用的两个相关约定:

  1. 自动使用最近的_Layout.cshtml
  2. 不支持@RenderBody(),并且在尝试早期编译_Layout.cshtml时使用@Body会导致启动错误。