blazor 相关问题

Blazor是一个Web框架,允许开发人员在.NET中编写客户端代码。它是ASP.NET Core的一部分,称为“Razor Components”。

从 Blazor 服务器应用程序访问手机照片库

有一个网站(Blazor 服务器)。客户通过手机访问它,拍摄事故的照片和视频。 他可以将照片、视频发送到服务器并记录在数据库中吗...

回答 2 投票 0

是否可以在执行代码之前加载服务器端 Blazor 页面 HTML?

以前的 HTML 页面会在 Blazor 页面的“@code”部分(默认项目中的“正在加载...”消息)运行之前/同时在 B 的客户端实现上呈现。

回答 3 投票 0

可以在 Blazor 的 DOM 事件中混合 Javascript 和 C# 代码吗?

我正在尝试在 Blazor WebAssembly 中实现下一个目标;我需要能够侦听组件中的事件,并使用 Javscript 和 C# 代码,如下所示: 我正在尝试在 Blazor WebAssembly 中实现下一个目标;我需要能够侦听组件中的事件,并使用 Javscript 和 C# 代码,如下所示: <button onclick="console.log('Showing event from Js: ' + event); @Test()">Test</button> @code { public void Test() { JSRuntime.InvokeVoidAsync("console.log", "Showing log from C#"); } } 第一个问题是我收到错误“无法将类型 void 隐式转换为对象”,因此如果我更改 Test 方法签名只是为了返回一个对象 public object Test() { JSRuntime.InvokeVoidAsync("console.log", "Showing log from C#"); return null; } 应用程序编译,但一旦页面加载,“Test()”函数就会自动执行,如果我单击按钮,它只会执行 Javascript 代码,而不是两段代码。 我知道我应该在 Blazor 中处理事件,在事件名称前添加“@”符号,以便调用 C# 方法,并使用互操作执行 Javascript 代码,但这样,我就无法使用默认的 Javascript“事件”我需要使用它,而不是 Blazor“事件”版本。 提前致谢! 只能有1个onclick属性,所以要么从JS调用C##方法,要么从C#调用JS代码。在这两种情况下,您都需要互操作,但不支持以您尝试的方式组合它。 “Test()”函数自动执行 是的,在onclick="... @Test()"中,它是在页面呈现时执行的,而不是在单击按钮时执行的。 是的,您可以添加 javascript 事件侦听器,以便 JS 和 C# 都可以运行。 例如在 App.razor 或 _Host.cshtml <body> 的底部 <script src="_framework/blazor.web.js"></script> <script> document.addEventListener("click", function(e){ if (e.target.id !== "testButton")return console.log("I caught ", arguments," in javascript!") }) 您可能需要查找“如何将事件侦听器添加到动态生成的元素。” 内联,具有不同程度的黑客性,有时您可以使用“备用”javascript事件,其中几个事件几乎同时在同一元素上触发: <input @onchanged="Test" onblur="javascript:…" /> <select @onchanged="Test" oninput="javascript:…">...</select> <select @bind="Test" oninput="javascript:…">...</select> <button @onclick="Test" onmouseup="javascript:…">...</button>

回答 2 投票 0

Body 之外的 Blazor 页面元素

我有一个 Blazor 服务器端应用程序,试图了解其结构。在 MainLayout.razor 页面中,我看到标签 @Body,这是渲染每个页面内容的位置。 我想知道,是吗

回答 3 投票 0

从 Blazor Web 程序集迁移到 Azure 上的 Blazor Web 应用程序

我正在尝试将应用程序从 Blazor .NET 7 Web 程序集更新为具有交互式服务器渲染的 Blazor on .NET 8.0 Web 应用程序。在 Razor 页面的 Web 组件上,我有很多

回答 1 投票 0

如何使用 Blazor 修改 Telerik 组件内的元素样式?

我正在尝试从 TelerikMultiSelect 组件内部修改自动完成属性。这是 TelerikMultiSelect 生成的 html 代码: 我正在尝试从 TelerikMultiSelect 组件内部修改自动完成属性。这是 TelerikMultiSelect 生成的 html 代码: <div data-id="" class="telerik-blazor k-multiselect autocompleteDisabled k-input k-input-solid k-input-md k-rounded-md" dir="ltr"> <!--!--> <div class="k-input-values" tabindex="-1"> <div class="k-chip-list k-chip-list-md"> </div> <!--!--> <input type="text" autocomplete="off" placeholder="" size="1" tabindex="0" class="k-input-inner" role="combobox" aria-busy="false"><!--!--> </div> <button class="telerik-blazor k-button k-input-button k-button-solid k-button-md k-button-solid-base k-icon-button k-hidden" id=" data-id="" dir="ltr" tabindex="-1" type="button"> <!--!--> <!--!--> <span class="telerik-blazor k-button-icon k-icon k-svg-icon k-svg-i-caret-alt-down" aria-hidden="true"> <!--!--> <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"> <!--!--> <!--!--> <path d="M256 352 128 160h256z"></path> <!--!--> </svg> </span> </button> </div> 这个组件有一个“Class”参数,我可以在其中修改CSS,但它不会影响自动完成属性所在的标签。正如你所看到的,默认情况下,自动完成功能是“关闭”的,但我读到这在 Chrome 中不起作用,所以每当我在框中单击时,我的地址都会建议由自动完成功能填充。 我已经用JS完成了,OnAfterRenderAsync我调用JS函数,它将自动完成属性更改为“禁用”,然后它停止工作。但由于我有一个使用 Blazor 的干净 JS 项目,这不是我想要的解决方案。 请问有什么想法可以帮助我吗? 提前非常感谢您 我们在我工作的公司使用 Telerik,我也遇到过同样的问题,通常从组件库修改组件的 css 有时会很困难,因为它可以改变组件的行为(根据我的经验)。但是解决方法我发现修改任何 telerik 组件 css 是在您正在使用它的 .razor 页面(或 .cshtml)中使用。 让我展示一个示例,我创建了一个名为 Example.razor 的 .razor 文件,其中包含以下代码 为了演示我之前所说的,我们将使用 blazor css 隔离 正如我们所看到的,我创建了一个 css 类,如果我们在按钮组件中使用该 css 类,则背景颜色不会不适用。但如果我们在同一个 .razor 文件中使用标签,这就会起作用 这样你就可以实现你想要做的事情,我希望这能启发你。

回答 1 投票 0

blazor - EditorRequired 属性

@代码{ [参数,编辑器必填] 公共踪迹踪迹{得到;放; } = 默认!; } 这是什么意思 编辑必填 公共踪迹踪迹{得到;放; } = 默认!; (为什么默认以及为什么

回答 2 投票 0

在 Blazor 组件中提交表单后如何设置本地存储项?

我正在使用 .NET8 Blazor Web 应用程序模板,其中包含身份信息,并添加了 Blazored.LocalStorage Nuget 包。 我想在用户登录时设置一个本地存储项...

回答 1 投票 0

Blazor 交互式汽车项目模板

我在不同的网站上阅读了很多相关内容,但我仍然不知道项目结构应该是什么样子。现在我有3个不同的项目: 项目 项目.客户端 项目.共享 ...

回答 1 投票 0

MatBlazor MatSelect 控制 MatOptions 的顺序

我使用 MatBlazor MatSelect 创建了以下代码: <

回答 1 投票 0

如何使我的 Blazor WebAssembly 项目从文件夹运行(通过双击打开它)

我创建了一个 Blazor WebAssembly 项目,它可以从 VS 运行,但是将其发布到本地文件夹后,对于 index.html,我可以双击运行它吗? 我必须使用网络服务器吗? 钙...

回答 1 投票 0

TestContainer 在本地运行容器时可能出现问题

我正在使用 TestContainers 库为我的 .NET 8 Blazor Web 应用程序编写集成测试,该应用程序具有 ASP.NET Core 8 Web API 和 SQL Server 数据库。 我有一个用于 Web API 的 dockerfile,并且...

回答 1 投票 0

如何使用 Blazor Bootstrap 创建新布局?

我想使用 Blazor Bootstrap 的侧边栏。 NewLayout.razor: @继承LayoutComponentBase 我想使用 Blazor Bootstrap 的侧边栏。 NewLayout.razor: @inherits LayoutComponentBase <div class="bb-page"> <Sidebar2 Href="/" IconName="IconName.BootstrapFill" Title="Blazor Bootstrap" BadgeText="v2.1.0" DataProvider="Sidebar2DataProvider" /> <main> <div class="bb-top-row px-4 d-flex justify-content-end"> <a href="https://docs.microsoft.com/aspnet/" target="_blank">About</a> </div> <article class="content px-4" style="position: relative;"> <div class="py-2"> @Body </div> </article> </main> </div> <style> .bb-page { display: flex; width: 100%; height: 100vh; } main { flex: 1; overflow: auto; min-width: 0; } </style> @code { IEnumerable<NavItem>? navItems; private async Task<Sidebar2DataProviderResult> Sidebar2DataProvider(Sidebar2DataProviderRequest request) { if (navItems is null) navItems = GetNavItems(); return await Task.FromResult(request.ApplyTo(navItems)); } private IEnumerable<NavItem> GetNavItems() { navItems = new List<NavItem> { new NavItem { Id = "1", Href = "/getting-started", IconName = IconName.HouseDoorFill, Text = "Getting Started"}, new NavItem { Id = "2", IconName = IconName.LayoutSidebarInset, Text = "Content" }, new NavItem { Id = "3", Href = "/icons", IconName = IconName.PersonSquare, Text = "Icons", ParentId="2"}, new NavItem { Id = "4", IconName = IconName.ExclamationTriangleFill, Text = "Components" }, new NavItem { Id = "5", Href = "/alerts", IconName = IconName.CheckCircleFill, Text = "Alerts", ParentId="4"}, new NavItem { Id = "6", Href = "/breadcrumb", IconName = IconName.SegmentedNav, Text = "Breadcrumb", ParentId="4"}, new NavItem { Id = "7", IconName = IconName.ListNested, Text = "Sidebar 2", ParentId="4"}, new NavItem { Id = "701", Href = "/sidebar2", IconName = IconName.Dash, Text = "How to use", ParentId="7"}, new NavItem { Id = "702", Href = "/sidebar2-examples", IconName = IconName.Dash, Text = "Examples", ParentId="7"}, new NavItem { Id = "8", IconName = IconName.WindowPlus, Text = "Forms" }, new NavItem { Id = "9", Href = "/autocomplete", IconName = IconName.InputCursorText, Text = "Auto Complete", ParentId="8"}, new NavItem { Id = "10", Href = "/currency-input", IconName = IconName.CurrencyDollar, Text = "Currency Input", ParentId="8"}, new NavItem { Id = "11", Href = "/number-input", IconName = IconName.InputCursor, Text = "Number Input", ParentId="8"}, new NavItem { Id = "12", Href = "/switch", IconName = IconName.ToggleOn, Text = "Switch", ParentId="8"}, }; return navItems; } } 我想将其用作客户端页面上的新布局。但它一直向我展示 3 点加载的东西。(https://i.sstatic.net/Jp3jQFK2.png)。有一个关于它的问题链接但是服务器项目中的App.razor对我不起作用。 我想将其用作客户端页面上的新布局。我发现这个视频link2最接近我想做的事情,但它在服务器端运行页面。 为了创建“@layout NewLayout”,布局必须在客户端,但即便如此,我也无法将@rendermode InteractiveWebAssembly写入布局中。给出以下错误: “InvalidOperationException:无法将参数“Body”传递给渲染模式“InteractiveWebAssemblyRenderMode”的组件“NewLayout”。这是因为该参数的委托类型为“Microsoft.AspNetCore.Components.RenderFragment”,该类型是任意代码,无法序列化.” 根据您的另一个问题,您必须为您的项目设置InteractiveWebAssembly渲染模式 创建新项目时,选择如下: 并按照交互式服务器模式doc中的步骤操作 但是你必须在app.razor中将渲染模式保持为InteractiveWebAssembly 我建议您选择交互式位置作为全局的原因是导航项只会在 OnAfterRenderAsync 生命周期事件期间加载。 如果按照组件设置交互位置,页面将呈现为静态,并且不会触发 OnAfterRenderAsync 事件,侧边栏将继续加载 public class Sidebar : BlazorBootstrapComponentBase { private bool collapseNavMenu = true; private bool collapseSidebar; private bool isMobile; private IEnumerable<NavItem>? items; private DotNetObjectReference<Sidebar> objRef; private bool requestInProgress; protected override string? ClassNames => BlazorBootstrapComponentBase.BuildClassNames(base.Class, ("bb-sidebar", true), ("collapsed", collapseSidebar), ("expanded", !collapseSidebar)); protected override string? StyleNames => BlazorBootstrapComponentBase.BuildStyleNames(base.Style, ("--bb-sidebar-width: " + Width.ToString(CultureInfo.InvariantCulture) + WidthUnit.ToCssString() + ";", Width > 0f)); [Parameter] public string? BadgeText { get; set; } [Parameter] public string? CustomIconName { get; set; } [Parameter] [EditorRequired] public SidebarDataProviderDelegate? DataProvider { get; set; } [Parameter] public string? Href { get; set; } = string.Empty; [Parameter] public IconName IconName { get; set; } [Parameter] public string? ImageSrc { get; set; } private string? navMenuCssClass => GetNavMenuCssClass(); [Parameter] [EditorRequired] public string? Title { get; set; } [Parameter] public float Width { get; set; } = 270f; [Parameter] public Unit WidthUnit { get; set; } = Unit.Px; protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { await base.JSRuntime.InvokeVoidAsync("window.blazorBootstrap.sidebar.initialize", base.Id, objRef); bsWindowResize(await JSRuntimeExtensions.InvokeAsync<int>(base.JSRuntime, "window.blazorBootstrap.sidebar.windowSize", Array.Empty<object>())); await RefreshDataAsync(firstRender); } await base.OnAfterRenderAsync(firstRender); } protected override async Task OnInitializedAsync() { if (objRef == null) { objRef = DotNetObjectReference.Create(this); } if (base.AdditionalAttributes == null) { base.AdditionalAttributes = new Dictionary<string, object>(); } await base.OnInitializedAsync(); } [JSInvokable] public void bsWindowResize(int width) { if (width < 641) { isMobile = true; } else { isMobile = false; } } public async Task RefreshDataAsync(bool firstRender = false) { if (requestInProgress) { return; } requestInProgress = true; if (DataProvider != null) { SidebarDataProviderRequest request = new SidebarDataProviderRequest(); SidebarDataProviderResult sidebarDataProviderResult = await DataProvider(request); Sidebar sidebar = this; IEnumerable<NavItem>? enumerable2; if (sidebarDataProviderResult == null) { IEnumerable<NavItem> enumerable = new List<NavItem>(); enumerable2 = enumerable; } else { enumerable2 = sidebarDataProviderResult.Data; } sidebar.items = enumerable2; } requestInProgress = false; await InvokeAsync((Action)base.StateHasChanged); } public void ToggleSidebar() { collapseSidebar = !collapseSidebar; StateHasChanged(); } internal void HideNavMenuOnMobile() { if (isMobile && !collapseNavMenu) { collapseNavMenu = true; } } private string GetNavMenuCssClass() { HashSet<string> hashSet = new HashSet<string>(); if (collapseNavMenu) { hashSet.Add("collapse"); } hashSet.Add("bb-sidebar-content nav-scrollable bb-scrollbar"); if (collapseSidebar) { hashSet.Add("bb-scrollbar-hidden"); } return string.Join(" ", hashSet); } private void ToggleNavMenu() { collapseNavMenu = !collapseNavMenu; } protected override void BuildRenderTree(RenderTreeBuilder __builder) { TypeInference.CreateCascadingValue_0(__builder, 0, 1, __arg0: true, 2, this, 3, delegate (RenderTreeBuilder __builder2) { TypeInference.CreateCascadingValue_1(__builder2, 4, 5, collapseSidebar, 6, delegate (RenderTreeBuilder __builder3) { __builder3.OpenElement(7, "aside"); __builder3.AddAttribute(8, "id", base.Id); __builder3.AddAttribute(9, "class", ClassNames); __builder3.AddAttribute(10, "style", StyleNames); __builder3.AddAttribute(11, "role", "navigation"); __builder3.AddMultipleAttributes(12, RuntimeHelpers.TypeCheck((IEnumerable<KeyValuePair<string, object>>)base.AdditionalAttributes)); __builder3.AddAttribute(13, "b-h9l5f7lx3r"); __builder3.AddElementReferenceCapture(14, delegate (ElementReference __value) { base.Element = __value; }); __builder3.OpenElement(15, "div"); __builder3.AddAttribute(16, "class", "bb-sidebar-top-row navbar"); __builder3.AddAttribute(17, "b-h9l5f7lx3r"); __builder3.OpenElement(18, "div"); __builder3.AddAttribute(19, "class", "container-fluid ps-3"); __builder3.AddAttribute(20, "b-h9l5f7lx3r"); __builder3.OpenElement(21, "a"); __builder3.AddAttribute(22, "class", "navbar-brand d-flex align-items-center"); __builder3.AddAttribute(23, "href", Href); __builder3.AddAttribute(24, "b-h9l5f7lx3r"); if (!string.IsNullOrWhiteSpace(ImageSrc)) { __builder3.OpenElement(25, "span"); __builder3.AddAttribute(26, "class", "navbar-brand-image me-2"); __builder3.AddAttribute(27, "b-h9l5f7lx3r"); __builder3.OpenElement(28, "img"); __builder3.AddAttribute(29, "src", ImageSrc); __builder3.AddAttribute(30, "alt", Title); __builder3.AddAttribute(31, "b-h9l5f7lx3r"); __builder3.CloseElement(); __builder3.CloseElement(); } else { __builder3.OpenElement(32, "span"); __builder3.AddAttribute(33, "class", "navbar-brand-icon"); __builder3.AddAttribute(34, "b-h9l5f7lx3r"); __builder3.OpenComponent<Icon>(35); __builder3.AddComponentParameter(36, "Name", RuntimeHelpers.TypeCheck(IconName)); __builder3.AddComponentParameter(37, "CustomIconName", RuntimeHelpers.TypeCheck(CustomIconName)); __builder3.AddComponentParameter(38, "Class", "fs-4 me-2"); __builder3.CloseComponent(); __builder3.CloseElement(); } __builder3.OpenElement(39, "span"); __builder3.AddAttribute(40, "class", "navbar-brand-text fw-semibold expanded-only me-2"); __builder3.AddAttribute(41, "b-h9l5f7lx3r"); __builder3.AddContent(42, Title); __builder3.CloseElement(); if (!string.IsNullOrWhiteSpace(BadgeText)) { __builder3.OpenElement(43, "span"); __builder3.AddAttribute(44, "class", "navbar-brand-badge badge expanded-only"); __builder3.AddAttribute(45, "b-h9l5f7lx3r"); __builder3.AddContent(46, BadgeText); __builder3.CloseElement(); } __builder3.CloseElement(); __builder3.AddMarkupContent(47, "\r\n "); __builder3.OpenElement(48, "button"); __builder3.AddAttribute(49, "title", "Navigation menu"); __builder3.AddAttribute(50, "class", "navbar-toggler px-2"); __builder3.AddAttribute(51, "onclick", EventCallback.Factory.Create<MouseEventArgs>((object)this, (Action)ToggleNavMenu)); __builder3.AddAttribute(52, "b-h9l5f7lx3r"); __builder3.AddMarkupContent(53, "<span class=\"navbar-toggler-icon bi bi-list\" b-h9l5f7lx3r></span>"); __builder3.CloseElement(); __builder3.CloseElement(); __builder3.CloseElement(); __builder3.AddMarkupContent(54, "\r\n\r\n "); __builder3.OpenElement(55, "div"); __builder3.AddAttribute(56, "class", navMenuCssClass); __builder3.AddAttribute(57, "b-h9l5f7lx3r"); if (items == null) { __builder3.OpenElement(58, "div"); __builder3.AddAttribute(59, "class", "text-center my-2"); __builder3.AddAttribute(60, "b-h9l5f7lx3r"); __builder3.OpenComponent<Spinner>(61); __builder3.AddComponentParameter(62, "Type", RuntimeHelpers.TypeCheck(SpinnerType.Dots)); __builder3.AddComponentParameter(63, "Color", RuntimeHelpers.TypeCheck(SpinnerColor.Secondary)); __builder3.CloseComponent(); __builder3.CloseElement(); } else { __builder3.OpenComponent<SidebarItemGroup>(64); __builder3.AddComponentParameter(65, "NavItems", RuntimeHelpers.TypeCheck(items)); __builder3.CloseComponent(); } __builder3.CloseElement(); __builder3.CloseElement(); }); }); } }

回答 1 投票 0

Blazor 8 中的 SSO - AspNetUserLogins 中未写入任何条目

我在 .NET 8 上有一个带有 Identity Framework 的 Blazor Web 应用程序。我想与 Microsoft 一起使用 SSO,因此我配置了: builder.Services.AddAuthentication() .AddMicrosoftAccount(microsoftOption...

回答 1 投票 0

在 Blazor WASM Standalone 中获取访问令牌

我有一个 Blazor WASM 独立应用程序,它使用 Azure AD B2C 进行用户和令牌管理。 我已经看到了有关此问题的其他问题/答案,但就我而言,这些方法都不起作用,我的

回答 1 投票 0

如何阻止 Blazor 重新加载页面并清除 html 标签?

我正在使用 .NET 8 Blazor WASM(服务器和客户端项目)和 Bootstrap 5.3。当页面加载时,我有一个 javascript 文件,该文件为 中设置的亮/暗模式设置 data-bs-theme 类 我正在使用 .NET 8 Blazor WASM(服务器和客户端项目)和 Bootstrap 5.3。当页面加载时,我有一个 javascript 文件,该文件为 <html> 标记中设置的亮/暗模式设置 data-bs-theme 类。这也可以在我的导航栏菜单中使用按钮进行更改。但是,当我手动路由到示例路由页面(例如 /weather 和 /counter)时,主题会保留,除非我使用 <a> 标签或 .NET 的 <NavLink> ,它会重新加载整个页面和“data-bs-theme” “课程被删除,只剩下<html lang="en">。但是,如果我在此之后刷新页面,主题将重新应用并按预期工作。我的 NavMenu 组件设置为 @rendermode InteractiveServer。 (function () { var theme = localStorage.getItem('theme'); if (!theme) { theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';; } document.documentElement.setAttribute('data-bs-theme', theme); })(); 我尝试使用 OnAfterRenderAsync 设置主题,但这不会改变任何内容,还会导致页面在刷新/首次加载时闪烁。我尝试过关闭 InteractiveServer,但这没有帮助,C# 代码很少,并且该项目几乎与全新的 Blazor Web 应用程序相同。我是 Blazor 的新手,所以我确信我遗漏了一些东西,但 Microsoft 文档没有提到有关整个页面重新加载或编辑标签的任何信息。 这在here有类似的解决。然而,这些是我在根级别上直接更改 <html> 标签所做的更改。因此,经过一番挖掘后,我无法在 app.razor 文件中使用 OnAfterRenderAsync,也无法调用 JSRuntime。因此,当 Blazor 重新加载整个 DOM 并执行某些操作来擦除我设置的属性时,我完全不知道如何在页面加载之间保留标签 data-bs-theme 。我尝试在 MainLayhout、App.Razor 和我在 MainLayout 中调用的我自己的 NavMenu 组件中执行此操作。 这篇文章也解决了这个问题,但没有答案,而且一个建议的答案似乎是过度设计的。我是 Blazor 的新手,如果这篇文章显示了执行此操作的正确方法,因为我已经尝试过但无法使其工作,或者如果有更好的方法,任何帮助将不胜感激,我非常坚持这一点。 Blazor 的增强型导航 此解决方案特定于 Blazor .NET +8,它允许 JavaScript 在 App.razor 中运行 Bootstrap Color Mode(主题)设置脚本在整页重新加载期间按预期执行。但是,当导航到另一个页面时,Blazor 使用“增强导航”来最大限度地减少加载时间。这是部分加载,其中原始布局与新页面内容合并。在此合并过程中,对主题属性的更改将会丢失。 解决此问题的一种方法是在 Blazor 的 enhancedload 事件上运行主题设置脚本,该事件在导航后发生。应在 DOMContentLoaded 事件中添加侦听器,以确保它在 Blazor 启动后运行。此示例脚本更新完整和部分(增强)页面加载的主题属性。 App.razor <script> document.addEventListener('DOMContentLoaded', (e) => { // update on initial page load updateTheme(); // then update on partial page reloads Blazor.addEventListener('enhancedload', () => { updateTheme(); }); }) function updateTheme() { let theme = localStorage.getItem('theme'); if (!/(light|dark)/.test(theme)) { theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';; localStorage.setItem('theme', theme); } document.documentElement.setAttribute('data-bs-theme', theme); } </script>

回答 1 投票 0

在应用业务逻辑后渲染具有禁用属性设置的 blazor 组件

在应用一些业务逻辑后,我在渲染具有特定属性的组件时遇到问题。网页应该遵循以下逻辑: 客户进入页面 OnInitializedAsync() 是

回答 1 投票 0

确保 BaseAddressAuthorizationMessageHandler 附加访问令牌

在我的 Blazor WASM 应用程序中,当我使用以下代码调用后端 API 时,我收到 401 - 未经授权的状态代码。如何检查以确保有效的 access_token 附加到我的 API 调用? 哈...

回答 1 投票 0

blazor 方案已存在:addidentities

正如您在屏幕截图中看到的,我只有一处添加身份。我制作了一个自定义用户管理器并注册了它。 我不知道如何获得任何其他可能的重复项,它说它是

回答 1 投票 0

部署到 IIS 后,Blazor wasm 不提供来自 wwwroot 的静态文件

我正在开发 .NET 5.0 Blazor WASM 应用程序。当我使用 IIS Express 运行 Visual Studio 中的应用程序并导航到 https://localhost:5001/docs/simple.pdf 时,该文件将在浏览器中提供。 怎么...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.