Code decides: code defaults
A code default says what renders every page of a type that has no template:
builder.AddRelatudeCMS()
.AddMvcRendering().AddRazorPagesRendering()
.AddRendering(o => o
.RenderRazorView<IHomePage>("Home") // Views/Shared/Home.cshtml
.RenderRazorView<IArticle>() // no name: the type's, so Views/Shared/Article.cshtml
.RenderMvcController<ISectionPage>("Section") // SectionController.Index
.RenderRazorPage<ILandingPage>("Landing") // Pages/Landing.cshtml
.RenderRazorView<IPage>("Default")); // every other page| Call | Renders the type with |
|---|---|
RenderRazorView<IArticle>() |
the view Article: the type's name without its I |
RenderRazorView<IArticle>("ArticleWide") |
the view ArticleWide |
RenderRazorView<IProduct>(p => p.InStock ? "Product" : "SoldOut") |
a view chosen per page, or none for null |
RenderMvcController<INewsList>("News") |
NewsController.Index; ("News", "List") for another action |
RenderRazorPage<ILandingPage>("Landing") |
Pages/Landing.cshtml |
RenderResult<IFeed>((http, feed) => Results.Text(…)) |
any IResult: JSON, a Blazor component, a file (chapter 11) |
Render<ICampaign>(c => c.Live ? new RazorViewTarget("Live") : new RazorViewTarget("Teaser")) |
any target, chosen per page |
A default covers its type and every type derived from it. The closest type wins:
IPage ◄── IArticle ◄── INews RenderRazorView<IPage>("Default")
RenderRazorView<IArticle>()
an INews → "Article" IArticle is one step up, IPage two
an IProduct → "Default" only the IPage default covers itA second default for the same type replaces the first. Code defaults work for any content type, not only pages.
ViewPerType() suits sites where every type has a view named after it. Content that nothing else
renders gets that view, so an IFaqPage renders with FaqPage. It is off by default.