.net core 制作自定义Blazor组件
我从Blazor的乐趣开始, 我要做的第一件事是将菜单项包装为自定义组件,以使导航更具可读性 我尝试了一些类似的方法: 文件:Components\MenuItem.razor.net core 制作自定义Blazor组件,.net-core,components,blazor,webassembly,blazor-webassembly,.net Core,Components,Blazor,Webassembly,Blazor Webassembly,我从Blazor的乐趣开始, 我要做的第一件事是将菜单项包装为自定义组件,以使导航更具可读性 我尝试了一些类似的方法: 文件:Components\MenuItem.razor @正文 @代码{ 公共字符串链接{get;set;} 公共字符串文本{get;set;} 公共字符串角色{get;set;} } 但是,如果在导航中使用组件而不是相同的内容,则在运行应用程序时不会加载任何内容 在我的导航菜单中,添加以下内容 停止加载页面(我没有看到任何错误) 但是navmenu中的以下命令直
@正文
@代码{
公共字符串链接{get;set;}
公共字符串文本{get;set;}
公共字符串角色{get;set;}
}
但是,如果在导航中使用组件而不是相同的内容,则在运行应用程序时不会加载任何内容
在我的导航菜单中,添加以下内容
停止加载页面(我没有看到任何错误)
但是navmenu中的以下命令直接起作用
批准用户请求
更新,
问题是我错过了[参数]装饰,在那之后它就起作用了
最后的组件代码如下所示
@正文
@代码{
[参数]
公共字符串链接{get;set;}
[参数]
公共字符串文本{get;set;}
[参数]
公共字符串角色{get;set;}
[参数]
公共字符串{get;set;}
}
作为参考,身份验证模块是由另一个程序员实现的,并且工作:),其配置如下
builder.Services
.AddOidcAuthentication(选项=>
{
builder.Configuration.Bind(“oidc”,options.ProviderOptions);
options.UserOptions.RoleClaim=“角色”;
options.authenticationPath.LogInFailedPath=“/”;
options.authenticationpath.LogOutSucceededPath=“/”;
options.authenticationpath.LogOutCallbackPath=“/authentication/logout callbackpath”;
})
.AddAccountClaimsPrincipalFactory();
AuthorityConnection=builder.Configuration.GetSection(“oidc:Authority”).Value;
直接在导航菜单中工作
您的公共属性不需要[参数]
注释吗?这就是问题所在。谢谢您,我应该研究一下如何使用aspNetCore MenuItem!
@if (string.IsNullOrWhiteSpace(Roles) && RequireAuthentication == false)
{
@ChildContent
}
else
{
<AuthorizeView Roles="@Roles">
@ChildContent
</AuthorizeView>
}
@code {
[Parameter]
public bool RequireAuthentication { get; set; }
[Parameter]
public string Roles { get; set; }
[Parameter]
public RenderFragment ChildContent { get; set; }
}
<OptionalRolesAuthorizeView RequireAuthentication="@Model.RequireAuthentication" Roles="@Model.Roles">
<li class="nav-item px-3">
<NavLink class="nav-link" href="@Model.Href" Match="@Model.Match">
<span class="@Model.IconClass" aria-hidden="true"></span> @Model.Label
</NavLink>
</li>
</OptionalRolesAuthorizeView>
@code {
[Parameter]
public MenuItem Model { get; set; }
}
using Microsoft.AspNetCore.Components.Routing;
public class MenuItem
{
public string Label { get; set; }
public string Href { get; set; }
public string IconClass { get; set; }
public bool RequireAuthentication { get; set; }
public NavLinkMatch Match { get; set; }
public string Roles { get; set; }
}