升级MudBlazor NuGet包后对话框与菜单无法打开
问题:MudBlazor升级至6.12.0后对话框与菜单无法正常打开
我在Visual Studio 2022中将MudBlazor NuGet包从6.1.7版本升级到最新的6.12.0版本后,应用内的对话框和菜单均无法正常打开。此前6.1.7版本下应用运行完全正常。
我反复核对MudBlazor入门文档,确认配置无问题,且其他同架构应用使用新版本MudBlazor可正常运行。当前我使用.NET 8框架,切换至.NET 7后问题依然存在;尝试移除所有其他Blazor组件包,问题仍未解决。
以下是相关代码:
Program.cs
using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.IdentityModel.Tokens; using System.Text; using Microsoft.AspNetCore.Components.Authorization; using Blazored.LocalStorage; using AKSoftware.Localization.MultiLanguages; using System.Reflection; using MudBlazor.Services; using MudBlazor; using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Authentication.Google; using Radzen; var builder = WebApplication.CreateBuilder(args); builder.Services.AddHttpContextAccessor(); builder.Services.AddScoped<HttpContextAccessor>(); // Add services to the container. builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); builder.Services.AddBlazoredLocalStorage(); builder.Services.AddCors(); builder.Services.AddHttpClient(); builder.Services.AddMudServices(config => { config.SnackbarConfiguration.PositionClass = Defaults.Classes.Position.BottomRight; config.SnackbarConfiguration.PreventDuplicates = false; config.SnackbarConfiguration.NewestOnTop = false; config.SnackbarConfiguration.ShowCloseIcon = true; config.SnackbarConfiguration.VisibleStateDuration = 10000; config.SnackbarConfiguration.HideTransitionDuration = 500; config.SnackbarConfiguration.ShowTransitionDuration = 500; config.SnackbarConfiguration.SnackbarVariant = MudBlazor.Variant.Filled; }); builder.Services .AddAuthentication( options => { options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; } ) .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = builder.Configuration.GetValue<string>("JwtIssuer"), ValidAudience = builder.Configuration.GetValue<string>("JwtAudience"), IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration.GetValue<string>("JwtSecurityKey"))) }; }) .AddCookie() .AddGoogle(GoogleDefaults.AuthenticationScheme, googleOptions => { googleOptions.ClientId = builder.Configuration["GoogleClientId"]; googleOptions.ClientSecret = builder.Configuration["GoogleClientSecret"]; googleOptions.SaveTokens = true; }); builder.Services.AddRadzenComponents(); //Some services in here builder.Services.AddServerSideBlazor().AddHubOptions(options => { // maximum message size of 2MB options.MaximumReceiveMessageSize = 10000000; }); //Some services in here builder.Services.AddLanguageContainer(Assembly.GetExecutingAssembly()); //Servicos para suportar multilanguage builder.Services.AddControllers(); builder.Services.AddLocalization(options => options.ResourcesPath = "Resources"); //Some services in here var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRequestLocalization(GetLocalizationOptions()); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseCors( options => options .AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader() ); app.MapBlazorHub(); app.MapFallbackToPage("/_Host"); app.MapControllers(); app.MapRazorPages(); app.Run(); RequestLocalizationOptions GetLocalizationOptions() { var cultures = builder.Configuration.GetSection("Cultures") .GetChildren().ToDictionary(x => x.Key, x => x.Value); var supportedCultures = cultures.Keys.ToArray(); var localizationOptions = new RequestLocalizationOptions() .SetDefaultCulture("en-GB") .AddSupportedCultures(supportedCultures) .AddSupportedUICultures(supportedCultures); return localizationOptions; }
MainLayout.razor
@using DialogOptions = MudBlazor.DialogOptions @using Variant = MudBlazor.Variant @inherits LayoutComponentBase @inject NavigationManager NavManager @inject IAuthService _authService @inject ILocalStorageService _localStorage @inject IOperationService _operationService @inject IStringLocalizer<App> Localizer @inject IDialogService DialogService <MudThemeProvider Theme="MyCustomTheme" /> <MudDialogProvider /> <MudSnackbarProvider /> <RadzenComponents /> @if (load) { <MudLayout> <MudAppBar Elevation="0"> <div class="logo-toggle-section"> <MudGrid Style="height: 100%;width: 100%;"> <MudItem xs="2"> <MudIconButton Icon="@Icons.Material.Filled.Menu" id="collapse-button" Color="Color.Inherit" Edge="Edge.Start" OnClick="@(e => DrawerToggle())" /> </MudItem> </MudGrid> </div> <MudSpacer></MudSpacer> <NavMenu></NavMenu> <MudSpacer></MudSpacer> <MudMenu @onclick="OnClickProfile" ActivationEvent="MouseEvent.MouseOver" Class="user-info-section" AnchorOrigin="Origin.BottomLeft" TransformOrigin="Origin.TopCenter" Dense="true"> <ActivatorContent> <MudStack Row="true"> @if (currentUser?.user_email != null && !uri.Contains("login")) { <MudAvatar Variant="@Variant.Outlined" Style="@($"color:{MudBlazor.Colors.Grey.Lighten5}; border: 1px solid {MudBlazor.Colors.Grey.Lighten5};")">@currentUser.user_email.Substring(0, 1).ToUpper()</MudAvatar> <MudStack Justify="@Justify.Center" Spacing="0"> <MudText Typo="@Typo.subtitle2">@(currentUser.First_name != currentUser.user_email ? (currentUser.First_name + " " + currentUser.Last_name) : "")</MudText> <MudText Typo="@Typo.caption" Style="@(@"font-size: smaller; font-weight: 300;")">@currentUser.user_email</MudText> @* <MudText Align="@Align.End" @onclick="@HandleLogout" style="font-size: smaller; color: lightgray; float: right; cursor: pointer;">@Localizer["Logout"]</MudText> *@ </MudStack> } </MudStack> </ActivatorContent> <ChildContent> <MudMenuItem OnClick="OnClickLogout">@Localizer["Logout"]</MudMenuItem> </ChildContent> </MudMenu> @*<div class="logo-toggle-section"> <MudIconButton Icon="@Icons.Material.Filled.MoreVert" Color="Color.Inherit" Edge="Edge.End" /> </div>*@ <MudDivider></MudDivider> <div class="logo-section"> <div class="logo"></div> </div> <div id="rectangle"></div> </MudAppBar> <MudDrawer @bind-Open="_drawerOpen" ClipMode="DrawerClipMode.Always" Elevation="2"> <SideBar drawerToggle="@_drawerOpen"></SideBar> </MudDrawer> <MudMainContent Class="main-content"> <MudPaper Class="main-paper" Elevation="0"> @Body </MudPaper> </MudMainContent> </MudLayout> } @code { private string uri; private bool _drawerOpen = true; private int userId; private OrganizationModel currentOrg; private GetUserModel currentUser; private Boolean load; MudTheme MyCustomTheme = new MudTheme { Palette = new Palette { Primary = "#652CB3", AppbarBackground = "#652CB3", AppbarText = "#ffffff", DrawerBackground = "#f7f7f7", Background = "#ffffff" }, LayoutProperties = new LayoutProperties { AppbarHeight = "200px", DrawerWidthLeft = "160px" }, ZIndex = new ZIndex { AppBar = 0 } }; void DrawerToggle() { _drawerOpen = !_drawerOpen; } protected override void OnParametersSet() { uri = NavManager.Uri; } protected async override Task OnInitializedAsync() { //Get info to display to user } private async void HandleLogout() { await _localStorage.ClearAsync(); await _authService.Logout(); currentUser = null; NavManager.NavigateTo(NavManager.BaseUri + "LogOut", true); } private void OnClickLogout() => HandleLogout(); }
内容的提问来源于stack exchange,提问作者kiddo
相关产品推荐
相关产品推荐

