Halvvägs i kursen. Mål: studenten kan skapa en flersidig app med navigering, route-parametrar och en egen layout.
aspnet/core/blazor/fundamentals/routing@page inklusive parametrar och constraints.NavigationManager.LayoutComponentBase.@page, route-parametrar, constraints, query-strings.NavigationManager, NavLink, NavLinkMatch./products/{id} och /products/{id:int}. Vid felaktig URL får man 404 istället för run-time exception. Mycket bättre UX.
NavLinkMatch.All. Detta är ett vanligt missförstånd.
MainLayout är "ramen runt sidan". @Body är hålet där sidan dyker upp. Använd whiteboard.
Pages/Products/Index.razor med @page "/products" som listar fem hårdkodade produkter.Pages/Products/Details.razor med @page "/products/{Id:int}" som visar en produkt.NavLink href="@($"/products/{p.Id}")" för varje rad.AdminLayout.razor med annan färg och en "Admin"-banner. Använd den på en ny @page "/admin".NavigationManager.NavigateTo i en handler — t.ex. efter en simulerad "spara"-knapp.@page "/products/{Id:int}"
@inject NavigationManager Nav
<h1>Produkt @Id</h1>
<button @onclick="GoBack">Tillbaka</button>
@code {
[Parameter] public int Id { get; set; }
private void GoBack() => Nav.NavigateTo("/products");
}
/products?page=2 via [SupplyParameterFromQuery].@page "/{*path}".Product-klass och en hårdkodad lista.Imports.razor — många glömmer namespace för NavigationManager.[Parameter], 3) saknar constraint så typen blir string.NavLinkMatch.Prefix matchar "/" mot allt. Sätt Match="NavLinkMatch.All" på Home-länken.<NotFound> i Routes.razor renderas inte!<NotFound>-render fragmentet borttaget. Använd Router NotFoundPage="typeof(NotFound)" som pekar på en hel komponent i stället. Se studentsidans 404-sektion.