如何按名称呈现模板?

时间:2012-11-07 16:52:31

标签: servicestack

我正试图了解ServiceStack 自托管应用和新API。

在单独的文件夹中添加两个相同名称的视图会导致启动时出错。这是不允许的吗?

Foo\
  Index.cshtml

Bar\
  Index.cshtml

有没有办法通过方法上的装饰器指定模板或直接作为返回值?我知道在DTO之后命名视图的惯例。我更喜欢更明确或遵循更接近Sinatra / Express的惯例。

return Render(typeof(Views.Foo.Index), new { Name = "Nelly" });

1 个答案:

答案 0 :(得分:1)

ServiceStack的Razor Rockstars website包含ServiceStack中Razor支持的文档,列出了一些选择不同模板的选项:

如果它不遵循约定(即请求或响应DTO名称),那么您可以通过返回装饰HttpResult来动态指定使用哪个视图或布局模板:

return new HttpResult(dto) {
    View = {viewName},
    Template = {layoutName},
};

如果您正在使用静态视图(即服务始终使用相同的视图),那么您可以通过使用[DefaultView]属性

来装饰它来指定要使用的视图
[DefaultView("Rockstars")]
public object Get(Rockstars request) { 
    ...
    return responseDto; 
}

在任何一种情况下,如果你想要强类型,你可以使用像typeof(RequestDto).Name这样的东西。

视图名称必须是唯一的

与MVC不同,heirachy不会影响ServiceStack中的视图选择,因为每个查看页面(即/Views文件夹中的剃刀页面)必须是唯一的,您可以自由地放置它们在你想要的任何平面或嵌套文件夹结构中。