سلام
مشابه سایت جاری از یک CascadingValue بنام ApplicationState در برنامه استفاده کرده ام. در این ApplicationState اعضایی وجود دارند مانند
public CurrentUserModel? CurrentUser { set; get; } public string? UserName { get; set; } [CascadingParameter] public HttpContext HttpContext { set; get; }
چنانچه فایل App برنامه بصورت زیر باشد.
<head> <HeadOutlet /> </head> <body> <Routes /> </body> </html>
HttpContext نال نیست ولی اعضای دیگر مانند CurrentUser , UserName در سایر صفحات نال نشان میدهد. نمونه عکس زیر
پس از تغییر HeadOutlet و Routes فایل App به InteractiveServer اینبار برعکس میشود و HttpContext نال میشود و اعضای دیگر ApplicationState مقدار دارند
<body> <Routes @rendermode="RenderModeForPage" /> <script src="_framework/blazor.web.js"></script> </body> </html> @code { [CascadingParameter] private HttpContext HttpContext { get; set; } = default!; private IComponentRenderMode? RenderModeForPage => HttpContext.Request.Path.StartsWithSegments("/Account") ? null : InteractiveServer; }
مشابه عکس زیر
راه حل نال نشدن همه اعضاء در هردو صورت InteractiveServer و یا غیر InteractiveServer چیست؟
با تزریق
[Inject] IHttpContextAccessor HttpContextAccessor{ get; set; }
در ApplicationState و مقدار دهی HttpContext مشکل حل میشود ولی شما در سایت از این روش استفاده نکرده اید
protected override async Task OnInitializedAsync() { this.HttpContext = HttpContextAccessor.HttpContext; CurrentUser = new CurrentUserModel { IsAdmin = true }; }