【问题标题】:Load page inside Body element inside page which was loaded in other Body element?在其他 Body 元素中加载的页面内的 Body 元素内加载页面?
【发布时间】:2020-06-10 22:46:35
【问题描述】:
我有 3 页。
1.一个空白页面,其中只有一个@Body。我将其保留为显示其他页面的占位符。
2.第二个页面有控件和@Body,它被加载在第一个空白页面内。
3. 第三个页面应该放在第二个页面的@Body 里面而不破坏它的内容。
无论如何,当我尝试从第二页加载 NavigationManager.NavigateTo( "/page3" ); 时 - 第二页的内容被破坏并替换为 page3 的内容。
【问题讨论】:
标签:
blazor
blazor-client-side
asp.net-blazor
【解决方案1】:
您只能在布局组件上使用默认的@Body 空间,继承自LayoutComponentBase。您的第一个空白页肯定会这样做,否则不会显示 page2。但是要在 page2 上使用 @Body 占位符并使用路由导航到 page3,您还需要让 page2 成为布局。
所以你真正需要做的就是让page2也成为一个布局,将它的布局设置为page1,将page3的布局设置为page2。如果你想在某个路由只显示 page2 和空白 @Body 你应该设置这个路由一个完全空白的页面并将它的布局设置为 page2。
比如:
BlankPageLayout.razor
@inherits LayoutComponentBase
@Body
Page2Layout.razor
@inherits LayoutComponentBase
@layout BlankPageLayout
<some html>
@Body
</some html>
Page2.razor
@page "/page2"
@layout Page2Layout
Page3.razor
@page "/page3"
@layout Page2Layout
<some html></some html>
现在导航到page2,您将只得到一个 Page2Layout,导航到 page3,您将得到一个 Page2Layout,其中包含 page3 内容。