1

我正在使用 ServiceStack Markdown Razor 来呈现 DTO,但它没有使用 _Layout.cshtml。我遵循约定,其中 Markdown 文件的名称与响应类型相同。

我的源代码树如下所示:

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

示例服务.cs

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

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

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

4

2 回答 2

1

自动使用最近的_Layout.cshtml

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

不支持@RenderBody(),

正确的。这是故意的,如此处所述

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

于 2013-03-26T19:43:44.463 回答
0

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

此外,在 _Layout.cshtml 文件中使用<!--@Body-->而不是@RenderBody(). 这在下面显示并在“布局/MasterPage 场景 - 基础”部分下的Markdown 功能页面上进行了描述。

例子.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 会导致启动错误。
于 2013-03-26T17:34:12.717 回答