{"record":{"id":"9b622030caf3d453","repo":"PrismLibrary/Prism","slug":"no-page-has-been-registered-with-the-provided-key","errorCode":null,"errorMessage":"No Page has been registered with the provided key","messagePattern":"No Page has been registered with the provided key","errorType":"exception","errorClass":"NavigationException","httpStatus":null,"severity":"error","filePath":"src/Maui/Prism.Maui/Navigation/Builder/NavigationBuilderExtensions.cs","lineNumber":86,"sourceCode":"\n    public static INavigationBuilder AddSegment<TViewModel>(this INavigationBuilder builder, Action<ISegmentBuilder> configureSegment) =>\n        builder.AddSegment(GetNavigationKey<TViewModel>(builder), configureSegment);\n\n    public static INavigationBuilder AddSegment<TViewModel>(this INavigationBuilder builder, bool useModalNavigation) =>\n        builder.AddSegment<TViewModel>(b => b.UseModalNavigation(useModalNavigation));\n\n    // Will check for the Navigation key of a registered NavigationPage\n    public static INavigationBuilder AddNavigationPage(this INavigationBuilder builder) =>\n        builder.AddNavigationPage(b => { });\n\n    public static INavigationBuilder AddNavigationPage(this INavigationBuilder builder, Action<ISegmentBuilder> configureSegment)\n    {\n        if (builder is not IRegistryAware registryAware)\n            throw new Exception(\"The builder does not implement IRegistryAware\");\n\n        var registrations = registryAware.Registry.ViewsOfType(typeof(NavigationPage));\n        if (!registrations.Any())\n            throw new NavigationException(NavigationException.NoPageIsRegistered, nameof(NavigationPage));\n\n        var registration = registrations.Last();\n        return builder.AddSegment(registration.Name, configureSegment);\n    }\n\n    public static ICreateTabBuilder AddNavigationPage(this ICreateTabBuilder builder) =>\n        builder.AddNavigationPage(b => { });\n\n    public static ICreateTabBuilder AddNavigationPage(this ICreateTabBuilder builder, Action<ISegmentBuilder> configureSegment)\n    {\n        if (builder is not IRegistryAware registryAware)\n            throw new Exception(\"The builder does not implement IRegistryAware\");\n\n        var registrations = registryAware.Registry.ViewsOfType(typeof(NavigationPage));\n        if (!registrations.Any())\n            throw new NavigationException(NavigationException.NoPageIsRegistered, nameof(NavigationPage));\n\n        var registration = registrations.Last();","sourceCodeStart":68,"sourceCodeEnd":104,"githubUrl":"https://github.com/PrismLibrary/Prism/blob/358118cd640d9a22ff8cf21c8ad197fa038b7990/src/Maui/Prism.Maui/Navigation/Builder/NavigationBuilderExtensions.cs#L68-L104","documentation":"AddNavigationPage looks up registrations of type NavigationPage in the view registry. If no NavigationPage has been registered (registry.ViewsOfType(typeof(NavigationPage)) is empty), it throws NavigationException(NoPageIsRegistered, nameof(NavigationPage)): 'No Page has been registered with the provided key'.","triggerScenarios":"Calling AddNavigationPage() in a navigation flow when the app never registered a NavigationPage view, e.g. missing navigationBuilder.AddNavigationPage() registration or ViewRegistration for typeof(NavigationPage) in App.RegisterTypes/CreateWindow.","commonSituations":"New Prism.Maui apps (Shell-based) that never registered a NavigationPage but use builder APIs assuming classic Xamarin-style navigation; removing NavigationPage registration during migration from Xamarin.Forms Prism.","solutions":["Register the NavigationPage in App: navigationBuilder.AddNavigationPage() inside CreateWindow, or ViewRegistration for typeof(NavigationPage) with a name like \"NavigationPage\".","Navigate via Shell routes instead if the app is Shell-based and no NavigationPage is desired.","Before calling, check registry.ViewsOfType(typeof(NavigationPage)).Any() and branch to a non-NavigationPage flow."],"exampleFix":"// before\nprotected override IWindow CreateWindow(IActivationState activationState)\n    => activationState.BuildWindow(null); // no NavigationPage registered\n// after\nprotected override void RegisterTypes(IContainerRegistry containerRegistry) { ... }\nprotected override IWindow CreateWindow(IActivationState activationState)\n{\n    var navRegistry = ... ; // ensure: navigationBuilder.AddNavigationPage();\n    return activationState.NavigationRegistry...\n}\n// simplest fix: register NavigationPage view so ViewsOfType(typeof(NavigationPage)) is non-empty","handlingStrategy":"validation","validationCode":"var registrations = registry.ViewsOfType(typeof(NavigationPage));\nif (!registrations.Any())\n    throw new InvalidOperationException(\"Register a NavigationPage view (e.g. navigationBuilder.AddNavigationPage()) before using AddNavigationPage in navigation flows.\");","typeGuard":null,"tryCatchPattern":"try\n{\n    builder.AddNavigationPage();\n}\ncatch (NavigationException ex) when (ex.Code == NavigationException.NoPageIsRegistered)\n{\n    logger.LogError(ex, \"No NavigationPage registered in the view registry\");\n}","preventionTips":["Register NavigationPage during app startup (CreateWindow/navigationBuilder.AddNavigationPage()) if your flows need it.","Verify view registrations at startup with a smoke test enumerating ViewsOfType(typeof(NavigationPage)).","If Shell-based, prefer Shell route navigation instead of NavigationPage-dependent builder calls."],"tags":["navigation","navigation-page","not-registered"],"backgroundTag":"resource-not-found","analyzedSha":"358118cd640d9a22ff8cf21c8ad197fa038b7990","analyzedAt":"2026-09-15T15:00:31.079Z","contentChangedAt":"2026-09-15T15:00:31.079Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}