Blazor如何中途终止渲染?避免大else块实现页面切换
Blazor实现条件渲染时跳过后续内容(不用嵌套大else块)
在多时段的日程页面里,选中某个时段后只想显示对应的编辑组件,不想渲染页面其他内容,还不想把一大堆主体代码塞进else块里?可以试试下面的办法:
办法1:把主体内容拆成独立组件
把页面原本的主体内容单独抽成一个组件(比如叫ScheduleMain.razor),这样当前页面的逻辑会非常清爽,完全不用堆大段代码在else里:
@* 你的日程主页面 *@ @if (selectedPeriod is not null) { <EditPeriod Period="selectedPeriod" /> } else { <ScheduleMain /> }
然后把原来的页面主体代码全放到ScheduleMain.razor里:
@* 日程页面主体内容组件 *@ <div> <!-- 这里放原本所有的页面主体内容 --> </div>
办法2:用RenderFragment封装主体内容
要是不想拆组件,也可以在当前页面里用RenderFragment把主体内容包起来,同样能让代码结构干净:
@* 你的日程主页面 *@ @if (selectedPeriod is not null) { <EditPeriod Period="selectedPeriod" /> } else { @MainContent } @code { private RenderFragment MainContent => __builder => { <div> <!-- 这里放原本所有的页面主体内容 --> </div> }; [Parameter] public Period? selectedPeriod { get; set; } }
另外提一句:你写的伪代码里用了return来终止渲染,但Blazor的Razor模板语法里不支持这么干,上面这两种办法既实现了你要的效果,又符合Blazor的开发规范,代码也更好维护。
内容的提问来源于stack exchange,提问作者Bennyboy1973
相关产品推荐
相关产品推荐

