You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 03:35:54