我希望能够基于我所在的内容页面来自定义视图的布局。例如,如果我在主页上,则可能需要一个最初不呈现但滚动显示的标题,并且该标题根据主页的布局而具有不同的颜色。如果我可以在其他页面上执行此操作,或者至少可以通过在服务器端使用Razor覆盖视图呈现,那将非常好。我不确定自定义视图模板是否是另一种选择。对于这个项目,我是一个菜鸟,因此非常感谢任何指针。
答案 0 :(得分:1)
为方便起见,所有cloudscribe核心和cloudscribe SimpleContent视图都编译到Razor类库nuget中。但是,您要自定义的任何视图都可以从相应的github存储库中复制到项目本地视图中,并且本地视图将始终优先。这样,您可以自定义任何视图。实际上,您甚至可以通过复制主题特定视图文件夹中的视图来自定义每个主题的视图。
例如,如果您的主页使用的是SimpleContent,则可以将Page/Index视图复制到本地项目中。在Views文件夹下创建一个Page文件夹,然后在其中复制Index视图,然后可以添加任何自定义逻辑或其他局部视图。如果需要,您也可以有条件地将javascript或CSS添加到@Section脚本{}或@Section样式{}中。您可以将自己的定制服务注入视图中,以封装要使用的任何逻辑。根据您要执行的操作,您可能还需要覆盖PageDetailPartial视图。
主_Layout.cshtml已经在您的项目中,每个主题文件夹都有一个。这样您就可以自定义主布局了。您还可以创建其他布局文件并设置要在主视图中使用的布局。即:
@{
Layout = "_MyCustomLayout";
}
,甚至添加一些条件逻辑以对每个URL使用不同的布局。这将覆盖从_ViewStart.cshtml设置的默认布局。您也可以将_ViewStart.cshtml文件放在任何视图子文件夹中,即上述的Page文件夹,以使该文件夹中的所有视图使用特定的布局。从视图设置布局只能对主视图进行设置,而不能从局部视图进行设置。
编辑:对于路由的注释中的其他问题
cloudscribe SimpleContent将常规路由与命名路由一起使用。在我们的项目模板中,您将在/Config/RoutingAndMvc.cs扩展方法中看到添加默认路由的方法。如果要更改路由,可以将其注释掉,并使用相同的路由名称自己添加路由。最简单的方法是将代码从那些扩展方法复制到您自己的扩展方法中,然后根据需要对其进行修改,然后改用您的扩展方法。您可以找到SimpleContent路由here
cloudscribe Core仅使用控制器和操作上的默认路由匹配,它不注册路由,仅使用常规约定。