Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions .github/workflows/build-samples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ on:
- "aspnet-core/minimal-apis-real-world/**"
- "blazor/create-interactive-ui-csharp-12/**"
- "blazor/forms-validation-masterclass/**"
- "blazor/ssr-interactive-islands/**"
- ".github/workflows/build-samples.yml"

pull_request:
Expand All @@ -32,6 +33,7 @@ on:
- "aspnet-core/minimal-apis-real-world/**"
- "blazor/create-interactive-ui-csharp-12/**"
- "blazor/forms-validation-masterclass/**"
- "blazor/ssr-interactive-islands/**"
- ".github/workflows/build-samples.yml"

workflow_dispatch:
Expand Down Expand Up @@ -421,3 +423,35 @@ jobs:
blazor/forms-validation-masterclass/BlazorProfileValidation.slnx
--configuration Release
--no-build

test-blazor-ssr-islands:
name: Test Blazor SSR and interactive island sample
runs-on: ubuntu-latest

steps:
- name: Check out repository
uses: actions/checkout@v5

- name: Install .NET 10 SDK
uses: actions/setup-dotnet@v5
with:
dotnet-version: "10.0.x"

- name: Restore
run: >
dotnet restore
blazor/ssr-interactive-islands/BlazorCatalogIslands.slnx

- name: Build
run: >
dotnet build
blazor/ssr-interactive-islands/BlazorCatalogIslands.slnx
--configuration Release
--no-restore

- name: Test
run: >
dotnet test
blazor/ssr-interactive-islands/BlazorCatalogIslands.slnx
--configuration Release
--no-build
59 changes: 43 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ Each sample folder contains a focused implementation of one tutorial topic. The
| [`aspnet-core/minimal-apis-real-world`](aspnet-core/minimal-apis-real-world/) | Focused .NET 10 Orders API demonstrating endpoint filters, FluentValidation, URL-segment versioning, typed results, and partitioned rate limiting | [ASP.NET Core / Minimal APIs in the Real World: Filters, Validation, Versioning & Rate Limiting](https://www.dotnet-guide.com/tutorials/aspnet-core/minimal-apis-real-world/) |
| [`blazor/create-interactive-ui-csharp-12`](blazor/create-interactive-ui-csharp-12/) | Interactive .NET 10 Todo Dashboard demonstrating Razor components, form binding, DataAnnotations validation, scoped state, EventCallback communication, filtering, and bUnit component tests | [Blazor Web Development: Create Interactive UIs with C# 12](https://www.dotnet-guide.com/tutorials/blazor/create-interactive-ui-csharp-12/) |
| [`blazor/forms-validation-masterclass`](blazor/forms-validation-masterclass/) | Focused .NET 10 Profile Settings form demonstrating manual EditContext management, DataAnnotations, FluentValidation, backend field-error mapping, accessible inputs, dirty state, and bUnit testing | [Blazor .NET 8 Forms & Validation: EditForm, FluentValidation & Server Error Handling](https://www.dotnet-guide.com/tutorials/blazor/forms-validation-masterclass/) |
| [`blazor/ssr-interactive-islands`](blazor/ssr-interactive-islands/) | Focused .NET 10 catalog demonstrating static SSR, streaming review updates, a serializable render-mode boundary, an Interactive Server cart island, and component/integration testing | [Blazor SSR & Interactive Islands: Streaming Rendering, Auto Render Mode & Progressive Enhancement](https://www.dotnet-guide.com/tutorials/blazor/ssr-interactive-islands/) |

## Companion articles
- [Common Microsoft.Extensions.AI mistakes](https://www.dotnet-guide.com/articles/dotnet-ai/microsoft-extensions-ai-common-mistakes/)
Expand Down Expand Up @@ -146,34 +147,60 @@ tutorials/
| | `-- BlazorTodoMinimal.Tests/
| | |-- BlazorTodoMinimal.Tests.csproj
| | `-- TodoDashboardTests.cs
| `-- forms-validation-masterclass/
| |-- BlazorProfileValidation.slnx
| |-- forms-validation-masterclass/
| | |-- BlazorProfileValidation.slnx
| | |-- README.md
| | |-- src/
| | | `-- BlazorProfileValidation/
| | | |-- BlazorProfileValidation.csproj
| | | |-- Program.cs
| | | |-- Models/
| | | | `-- ProfileModel.cs
| | | |-- Services/
| | | | `-- ProfileService.cs
| | | |-- Validation/
| | | | `-- ProfileValidator.cs
| | | `-- Components/
| | | |-- _Imports.razor
| | | |-- App.razor
| | | |-- Routes.razor
| | | |-- Pages/
| | | | |-- NotFound.razor
| | | | `-- ProfileSettings.razor
| | | |-- Shared/
| | | | `-- FormTextField.razor
| | | `-- Validation/
| | | `-- FluentValidationBridge.razor
| | `-- tests/
| | `-- BlazorProfileValidation.Tests/
| | |-- BlazorProfileValidation.Tests.csproj
| | `-- ProfileSettingsTests.cs
| `-- ssr-interactive-islands/
| |-- BlazorCatalogIslands.slnx
| |-- README.md
| |-- src/
| | `-- BlazorProfileValidation/
| | |-- BlazorProfileValidation.csproj
| | `-- BlazorCatalogIslands/
| | |-- BlazorCatalogIslands.csproj
| | |-- Program.cs
| | |-- Models/
| | | `-- ProfileModel.cs
| | | `-- CatalogModels.cs
| | |-- Services/
| | | `-- ProfileService.cs
| | |-- Validation/
| | | `-- ProfileValidator.cs
| | | `-- CatalogService.cs
| | `-- Components/
| | |-- _Imports.razor
| | |-- App.razor
| | |-- Routes.razor
| | |-- Pages/
| | | |-- NotFound.razor
| | | `-- ProfileSettings.razor
| | | |-- Catalog.razor
| | | `-- NotFound.razor
| | |-- Shared/
| | | `-- FormTextField.razor
| | `-- Validation/
| | `-- FluentValidationBridge.razor
| | | |-- CartIsland.razor
| | | |-- ProductCard.razor
| | | `-- ReviewsSection.razor
| `-- tests/
| `-- BlazorProfileValidation.Tests/
| |-- BlazorProfileValidation.Tests.csproj
| `-- ProfileSettingsTests.cs
| `-- BlazorCatalogIslands.Tests/
| |-- BlazorCatalogIslands.Tests.csproj
| `-- CatalogIslandTests.cs
|-- aspnet-core/
| |-- api-security-in-practice/
| | |-- ApiSecurityMinimal.slnx
Expand Down
8 changes: 8 additions & 0 deletions blazor/ssr-interactive-islands/BlazorCatalogIslands.slnx
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<Solution>
<Folder Name="/src/">
<Project Path="src/BlazorCatalogIslands/BlazorCatalogIslands.csproj" />
</Folder>
<Folder Name="/tests/">
<Project Path="tests/BlazorCatalogIslands.Tests/BlazorCatalogIslands.Tests.csproj" />
</Folder>
</Solution>
Loading
Loading