如何在App.razor文件中获取当前布局并添加条件判断
嘿,你这个思路没问题,但直接在<AuthorizeRouteView>标签内部写C# if代码块在Blazor里是行不通的——因为组件的子内容区域是基于RenderFragment的,不能直接嵌入裸的代码块。不过有两种简单的方式能实现你想要的效果:
方案一:在NotAuthorized内部加条件判断
这是最直接的方式,让NotAuthorized片段始终存在,但只有当布局匹配时才渲染内容:
<AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)"> <NotAuthorized> @if (currentlayout == layoutname) { <!-- 这里放你的授权失败后要显示的内容 --> <div class="alert alert-danger"> 抱歉,你没有访问该页面的权限,且当前布局匹配条件 </div> } </NotAuthorized> </AuthorizeRouteView>
这种方式的好处是写法简单,符合Blazor的模板语法习惯,大部分场景下都够用。
方案二:动态生成NotAuthorized的RenderFragment
如果你需要的是当布局不匹配时完全不渲染NotAuthorized片段(而不是渲染空内容),可以在代码块里动态构建RenderFragment:
<AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" NotAuthorized="@GetNotAuthorizedContent()" /> @code { private RenderFragment GetNotAuthorizedContent() { if (currentlayout == layoutname) { return builder => { // 这里可以用Blazor的渲染树构建语法来生成内容 builder.OpenElement(0, "div"); builder.AddAttribute(1, "class", "alert alert-warning"); builder.AddContent(2, "未授权访问,且当前布局符合要求"); builder.CloseElement(); // 也可以直接渲染自定义组件 // builder.OpenComponent<CustomNotAuthorizedComponent>(3); // builder.CloseComponent(); }; } // 条件不满足时返回null,就不会渲染NotAuthorized区域 return null; } // 假设你已经定义了这两个变量 private string currentlayout = "MainLayout"; private string layoutname = "MainLayout"; }
两种方案各有适用场景,你可以根据自己的需求来选~
内容的提问来源于stack exchange,提问作者Jeremy
相关产品推荐
相关产品推荐

