我有一个 Blazor 服务器端应用程序 (.Net7),由侧边栏、标题和正文部分组成。在正文部分,可以通过侧边栏导航到多个剃刀页面。 在所有 razor 页面中都会生成一些与页面功能相关的错误消息。所有这些错误消息都应显示在公共标头部分中。标头部分包含 razor 页面“razor_header”。
我已在上述页面中编写了以下代码,但我无法将错误消息从剃刀页面正确传递到标题剃刀页面。尽管生成了错误消息(我可以通过日志文件检查),但我并没有立即在标题页中看到它们。大多数情况下,它们会在其他事件中延迟显示。我的代码中缺少什么?我在 Blazor 服务器端不太擅长。我想我缺少一些基本的东西。我认为 Blazor 中的绑定也在页面之间起作用。但我认为事实并非如此。
我的 razor_header 页面
@inject TagService TagService
<div>
<h2>@TagService.Message_Main</h2>
</div>
我的razor_page_1.cs(rel.razor页面中的@inject TagService TagService)
public async Task Task_1()
{
//some code
if(error1_condition==true)
{
TagService.Message_Main=error1_text; //error1 should be shown in the header
StateHasChanged();
}
}
我的razor_page_2.cs(rel.razor页面中的@inject TagService TagService)
public async Task Task_2()
{
//some code
if(error2_condition==true)
{
TagService.Message_Main=error2_text; //error2 should be shown in the header
StateHasChanged();
}
}
我的razor_page_3.cs(rel.razor页面中的@inject TagService TagService)
public async Task Task_3()
{
//some code
if(error3_condition==true)
{
TagService.Message_Main=error3_text; //error3 should be shown in the header
StateHasChanged();
}
}
根据这些异步函数的调用方式,问题可能是您不在渲染器上下文中。尝试将
StateHasChanged();
替换为 await InvokeAsync(StateHasChanged);
这将确保 StateHasChanged 在正确的上下文中执行。