2

我正在尝试了解 ServiceStack自托管应用程序和新 API。

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

Foo\
  Index.cshtml

Bar\
  Index.cshtml

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

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

1 回答 1

1

ServiceStack 的Razor Rockstars 网站包含 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's 不会影响 ServiceStack 中的视图选择,并且因为每个视图页面(即/Views文件夹中的剃须刀页面)必须是唯一的,所以您可以自由地将它们布置在您希望的任何平面或嵌套文件夹结构中。

于 2012-11-07T17:45:10.980 回答