Blazor 服务器端(dotnet 核心 3.1)
我遇到了在客户方面显示的问题:
无法重新连接到服务器。重新加载页面以恢复功能。
每次我更新代码库或互联网时都会坏掉或类似的东西。
现在的目标是它应该在服务器再次返回时(或在某个时间间隔内)重新加载页面。
有什么可能可以帮助我吗?
我有一个带有库的服务器端 Blazor.NET 应用程序(dotnet core 3.1): ProtectedBrowserStorage ( https://www.nuget.org/packages/Microsoft.AspNetCore.ProtectedBrowserStorage ) 用于客户端浏览器中的加密存储
有时我的日志文件中会出现如下错误:
2020-04-01 14:05:17.4809 Error System.Threading.Tasks.TaskCanceledException: A task was canceled.
at Microsoft.JSInterop.JSRuntime.InvokeWithDefaultCancellation[T](String identifier, Object[] args)
at Microsoft.AspNetCore.ProtectedBrowserStorage.ProtectedBrowserStorage.GetAsync[T](String purpose, String key)
at PegasusV6.LocalStorageService.LoadBasket(MenuDTO menu) in LocalStorageService.cs:line 40 A task was canceled.
Run Code Online (Sandbox Code Playgroud)
我的问题是我不知道是什么导致了 JavaScript 调用中的这个错误。
是否有可以修复此类错误的服务器限制?
或者是客户端用户可能没有良好的互联网速度/连接,这是服务器端 Blazor 非常需要的?
希望有人能给我一个提示或任何可以改进它的东西。这是调用的 C# 函数:
public async Task LoadBasket(MenuDTO menu)
{
try
{
AppState.BasketData = await ProtectedLocalStore.GetAsync<BasketState>($"Basket_{My.StoreId}") ?? new BasketState();
}
catch (Exception ex)
{
My.Log.Error(ex);
AppState.BasketData = new BasketState();
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我尝试捕获 Blazor(服务器端)中 InputText 的文本更改,然后调用异步方法来检查输入是否是正确的优惠券代码。
HTML:
<EditForm Model="@Basket" OnValidSubmit="@CommitBasket">
Gutscheincode
<InputText class="coupon-input checkout-control pristine untouched"
@bind-Value="CouponCode"
@onchange="CouponCodeChanged">
</InputText>
@CouponText
</EditForm>`
Run Code Online (Sandbox Code Playgroud)
但是 CouponCodeChanged 没有引发 - OnKeyUp 没有用,因为文本值在该状态下没有改变......
这是 C# 方法:
public async Task CouponCodeChanged(ChangeEventArgs args)
{
using var client = ClientFactory.CreateClient();
var result = await ApiCalls.GetCouponCodeData(client, AppState.BaseUrl, 2, CouponCode);
CouponText = result== null ? "NOT FOUND" : $"exists:{result.Exists} amount:{result.Amount}";
}
Run Code Online (Sandbox Code Playgroud)
有谁提示或想法如何以方便的方式解决这个问题?
谢谢!
使用 Blazor dotnet core 3.1 并收到此错误:
The list of component records is not valid
Run Code Online (Sandbox Code Playgroud)
发现关于此的错误报告已于 2019 年 12 月关闭:https :
//github.com/dotnet/aspnetcore/issues/14966
看不到此错误的任何原因,并希望有一种解决方法(不能在每个页面调用时都出现此错误,这种情况很少发生......)。
有没有人有可能导致这种情况的想法/提示?
谢谢!
我正在寻找一个想法来覆盖“_Host”文件中的 css 文件路径以使其动态(属于用于访问 Blazor 网页的域)。
将服务器端 Blazor 与 dotnet core 3.0 结合使用
有没有人知道如何在运行时覆盖 CSS?
谢谢!
刚刚使用 DevExpress 的免费 Blazor 代码<HEAD>在运行时实现自定义数据:
_Hosts.cshtml(参见元素中的代码片段):
<!DOCTYPE html>
<html lang="en">
<head>
@(await Html.RenderComponentAsync<DocumentMetadataComponent>(RenderMode.ServerPrerendered))
</head>
<body>
<app>
@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))
</app>
<script src="_framework/blazor.server.js"></script>
</body>
Run Code Online (Sandbox Code Playgroud)
到目前为止效果很好(可以使标题、描述等动态化)。
现在的问题是我必须在顶层设置一些变量来过度使用和解释一次。我想知道使用的 url 并动态提供一些数据。
但以我现在的知识,我只能在每个组件(DocumentMetadataComponent + App)中做两次。
我在 MainLayout.razor 中获取数据:
<CascadingValue Value="StoreData" Name="StoreData">
@Body
</CascadingValue>
@code{
public StoreCompleteDTO StoreData { get; set; }
protected override async Task OnInitializedAsync()
{
using var tl = new TimeLogger($"MainLayout.razor OnInitializedAsync()");
StoreData = await AppState.GetStoreData(My.StoreId);
}
}
Run Code Online (Sandbox Code Playgroud)
这个 StoreData 变量必须在动态元数据中可用,因为我必须为其他商店选择不同的 CSS 文件...
希望解释清楚。
目标是只调用一次: StoreData = await AppState.GetStoreData(My.StoreId);
因为它是网络服务调用并且需要花费时间......
谢谢!
我在 .NET Core 3.0 上使用 Blazor Preview 9 服务器端以及用于在浏览器的本地存储中加载和保存数据的 nuget 包 Blazored.LocalStorage。
现在我想在加载应用程序时在需要时加载它一次。
为此,我需要使用 OnFirstRenderer,因为它必须完全位于客户端才能访问它的浏览器缓存。现在我使用页面“/”(Index.razor),但我不太确定这是否是正确的锚点或执行此操作的方法:
[Parameter]
public string Test { get; set; }
protected async override Task OnAfterRenderAsync(bool firstRender)
{
try
{
if (firstRender)
{
await localStorage.SetItemAsync("TEST", "Hallo Welt");
}
if (Test == null)
{
Test = await localStorage.GetItemAsync<string>("TEST");
StateHasChanged();
}
}
catch (Exception ex)
{
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
此外,我不知道如何使其适用于所有组件:
使用全局变量创建服务并将其注入每个组件或通过 CascadingValue 方法执行它是最好的方法吗?
谢谢!