在开发 Blazor WebAssembly 时,我一直在努力解决几个页面导航问题。
每次我从page1转到page2然后按下浏览器的后退按钮时,page1基本上都会重置,这是因为调用了on_initialized,你们如何在按下浏览器的后退按钮时保持页面的状态?
如果我有一个类似的页面@page '/person/{id}',如果从该页面我有一个类似的链接<NavLink href="/person/person-id-2">Another person</NavLink>。当我点击链接时,我看到 URL 正在更新,但实际页面没有刷新,你们如何解决这个问题?
===编辑===
在 @mrc-aka-shaun-curtis 给出答案后,我回顾了我的代码,为了修复#2,我移动了一些代码。在我有类似的事情之前
protected override async Task OnInitializedAsync()
{
PersonModel = await PersonService.Get<Person>(PersonId);
editContext = new EditContext(PersonModel);
}
Run Code Online (Sandbox Code Playgroud)
我现在将其移至
protected override async Task OnParametersSetAsync()
{
PersonModel = await PersonService.Get<Person>(PersonId);
editContext = new EditContext(PersonModel);
StateHasChanged();
}
Run Code Online (Sandbox Code Playgroud)
这排序#2,我可以<NavLink href="/person/2">Father</NavLink>在组件“人”中拥有一个
我有一个 Blazor webasemmbly 应用程序,它使用 asp.net core 作为后端,使用 Blazor wasm 作为前端。我有一个类可以检查 HTTP 问题,例如 notfound、BadReqest 和...
public class HttpInterceptorService
{
private readonly HttpClientInterceptor _interceptor;
private readonly NavigationManager _navManager;
private readonly RefreshTokenService _refreshTokenService;
public HttpInterceptorService(HttpClientInterceptor interceptor,
NavigationManager navManager,
RefreshTokenService refreshTokenService)
{
_interceptor = interceptor;
_navManager = navManager;
_refreshTokenService = refreshTokenService;
}
public void RegisterEvent() => _interceptor.AfterSend += HandleResponse;
public void RegisterBeforeSendEvent() =>
_interceptor.BeforeSendAsync += InterceptBeforeSendAsync;
public void DisposeEvent()
{
_interceptor.AfterSend -= HandleResponse;
_interceptor.BeforeSendAsync -= InterceptBeforeSendAsync;
}
private async Task InterceptBeforeSendAsync(object sender,
HttpClientInterceptorEventArgs e) …Run Code Online (Sandbox Code Playgroud) 要将 C# 编译为 WebAssemly 并与 JS 互操作,需要使用 Blazor WebAssembly ASP.NET 框架,该框架是为 SPA 设计的,如果您只想使用 JS 中的 C# 库,则会产生大量开销。
将 DLL 编译为 WebAssembly 并从 JavaScript 使用它的最低设置是什么?
我今天偶然发现了 Uno,我一直在试图弄清楚这个平台是否更能满足我们的需求。我们有一个 WPF 应用程序,我们想要制作一个 Web 版本,并使用 Blazor WASM,我们能够展示如何重用我们拥有的大多数 C# 业务逻辑并用 HTML/CSS 替换 XAML。我们的应用程序需要连接到通过 Rest API 为其提供数据的外部硬件(同时也是 WASM 的 Web 服务器)。如果我们将来需要本机访问,它还将使我们能够使用多平台。距离午夜还有 2 分钟,随着 Dotnet 6 的发布,我即将开始向 HTML/CSS 过渡。
从今天早上开始,我一直在想知道 Uno 是否允许我们保留我们拥有的大部分 WPF?有多少 WPF XAML 可以重用?全部、部分、没有?在过渡过程中我们是否会失去组件设计的 CSS 灵活性?Uno 能否将运行时生成的 XAML 元素处理为 WASM?Blazor WASM 可以在 MAUI 中与 Webview2 一起重用,原生应用程序的 Uno 版本是更好的选择吗?UWP 是一个可靠的途径吗?作为一个框架,我的意思是它似乎是 Uno 的基础?看起来 MAUI 和 Uno 正在走平行的道路,是否有潜在的合并或其中一个消亡?
希望有人可以帮助更好地理解其中的区别。我很感激任何反馈:)。
我试图RenderFragment从组件私有方法返回 a ,但出现编译错误:
'__builder' does not exist in the current context
Run Code Online (Sandbox Code Playgroud)
这是显示问题的最小代码:
<div>
@RenderButton(1)
</div>
@code {
private RenderFragment RenderButton(int number)
{
return builder =>
{
<button type="button">@number</button>
};
}
}
Run Code Online (Sandbox Code Playgroud)
在我看来,这可能是不可能/允许的,如果不是,有什么方法可以避免编写相同的渲染代码?假设我需要在RenderButton多个循环中使用此方法,并且 if else 块
编辑:我现在能想到的唯一解决方案是为每个RenderFragment方法创建一个组件
然而,我将一些自定义 CSS 从 bootstraps 网站添加到 Blazor 中的 app.css 文件中,同时在 Visual Studio 中编辑并保存该文件。当应用程序启动并加载 app.css 时,它会加载旧版本的 app.css 而无需我进行更改。有人知道为什么会发生这种情况吗?提前致谢
// ... some more css above....
.b-example-divider {
height: 3rem;
background-color: rgba(0, 0, 0, .1);
border: solid rgba(0, 0, 0, .15);
border-width: 1px 0;
box-shadow: inset 0 0.5em 1.5em rgb(0 0 0 / 10%), inset 0 0.125em 0.5em rgb(0 0 0 / 15%);
}
#blazor-error-ui {
background: lightyellow;
bottom: 0;
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
display: none;
left: …Run Code Online (Sandbox Code Playgroud) 我用的是vscode。我无法调试“独立”(或“托管”)blazor wasm。
类似的问题有很多,但它们都是针对 RC、.NET 6 明显修复的错误或 SDK 6.0.102 中明显修复的工具错误。
我阅读了所有文档。我怀疑这个问题是由于已知的热重载兼容性错误而变得更加复杂。
我了解一切的最新情况。我在 Linux (ubuntu 20) 上使用 chromium。
当我尝试调试时,我在弹出窗口中收到此错误:
Unable to launch browser: "Failed to launch browser!
ERROR:sandbox_linux.cc(377)] InitializeSandbox() called with multiple threads in process gpu-process.
WARNING: Kernel has no file descriptor comparison support: Operation not permitted
ERROR:process_singleton_posix.cc(341)] Failed to create /home/username/.config/Code/User/workspaceStorage/4208cd9cd69c4fe2a941aed538319caa/ms-vscode.js-debug/.profile/SingletonLock: Permission denied (13)
ERROR:chrome_browser_main.cc(1432)] Failed to create a ProcessSingleton for your profile directory. This means that running multiple instances would start multiple browser processes rather than …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个小型 Blazor Maui 应用程序示例,该应用程序使用身份服务器对用户进行身份验证。我试图达到可以从 Maui 应用程序登录的程度,然后每当我使用 blazorWebview 组件时,都可以访问用户的身份验证状态以进行身份验证决策。
目前,我在 Maui 应用程序的 razor 组件中设置了身份服务器登录流程,这完成了登录流程。
现在我希望能够将该登录状态/主体信息传递到 Blazor Web 视图以在组件中使用(其中一些在外部类库中引用)。有人有幸这样做过吗?
(另外,我已按照此处的 Microsoft 文档实现我自己的自定义身份验证状态提供程序,并将其添加到依赖项注入中,但没有说明如何将身份验证信息传递到 Blazor Web 视图)。
应用程序 = Blazor Web Assembly PWA 框架 6.0
API = Rest Api .netcore Framework 5.0
网址 = localtesting.mydomain.com
API 地址 = (localtesting.mydomain.com/api) 虚拟目录。
我创建了虚拟目录并将我的 API 上传到虚拟目录中。APi 按预期工作正常
然后我尝试在根文件夹上上传 Blazor WASM,但是当我这样做时,API 停止工作。因为 wasm 正在重定向 URL。
我认为这是由于 blazor 的后果规则由 web.config 处理
我尝试编辑 web.config 但无法让它工作
所以我尝试在 web.config 中添加一条规则,以不拦截 API 请求。
我尝试编辑 web.config 但仍然无法让它工作,因为 blazor 将所有请求重定向到 wwwroot 文件夹
以下是 web.config 文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<staticContent>
<remove fileExtension=".blat" />
<remove fileExtension=".dat" />
<remove fileExtension=".dll" />
<remove fileExtension=".json" />
<remove fileExtension=".wasm" />
<remove fileExtension=".woff" …Run Code Online (Sandbox Code Playgroud) 使用个人用户帐户升级 Blazor WebAssembly 时出现以下错误:
错误(活动)CS0618“SignOutSessionStateManager”已过时:“请改用“Microsoft.AspNetCore.Components.Web assembly.Authentication.NavigationManagerExtensions.NavigateToLogout”。
应该如何NavigateToLogout使用?
当前代码:
@using Microsoft.AspNetCore.Components.Authorization
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@inject NavigationManager Navigation
@inject SignOutSessionStateManager SignOutManager
<AuthorizeView>
<Authorized>
<a href="authentication/profile">Hello, @context.User.Identity.Name!</a>
<button class="nav-link btn btn-link" @onclick="BeginSignOut">Log out</button>
</Authorized>
<NotAuthorized>
<a href="authentication/register">Register</a>
<a href="authentication/login">Log in</a>
</NotAuthorized>
</AuthorizeView>
@code{
private async Task BeginSignOut(MouseEventArgs args)
{
await SignOutManager.SetSignOutState();
Navigation.NavigateTo("authentication/logout");
}
}
Run Code Online (Sandbox Code Playgroud) blazor ×7
c# ×5
asp.net-core ×2
.net-7.0 ×1
.net-maui ×1
css ×1
debugging ×1
iis ×1
interop ×1
javascript ×1
maui ×1
maui-blazor ×1
plesk ×1
signalr ×1
uno-platform ×1
webassembly ×1