Pou*_*lad 4 razor asp.net-core blazor
我正在使用Blazor(客户端)构建一个简单的Web应用程序,需要让Blazor重新渲染该组件。有没有办法通知框架重新渲染?
在此Razor页面上,我有一个简单的复选框,显示用户是否向Web应用授予了一定的权限。
ShouldRender()总是返回True。当isGrantedfield设置True为时,该复选框不会呈现,并且保持未选中状态。
剃刀页面:
@page "/foo"
@inject IJSRuntime js
<input type="checkbox" disabled @bind="isGranted" /> Some Permission
@code {
bool isGranted;
protected override async Task OnInitAsync() {
await js.InvokeAsync<object>(
"foo.bar",
DotNetObjectRef.Create(this),
nameof(BarCallback)
);
}
[JSInvokable]
public void BarCallback(bool result) {
Console.WriteLine($"BarCallback(result: {result})");
isGranted = result;
}
protected override bool ShouldRender() {
Console.WriteLine("Blazor is checking for re-rendering...");
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
JavaScript函数:
window.foo = {
bar: (dotnetObjRef, callback) => {
navigator.storage.persist()
.then(result => {
dotnetObjRef.invokeMethodAsync(callback, result)
.catch(reason => console.warn('Failed to call .NET method.', reason));
})
.catch(reason => console.warn('Failed to get permission.', reason));
}
}
Run Code Online (Sandbox Code Playgroud)
在Chrome控制台中的输出:
WASM: Blazor is checking for re-rendering...
WASM: BarCallback(result: True)
Run Code Online (Sandbox Code Playgroud)
.NET Core SDK: 3.0.100-preview6-012264
西装外套模板: Microsoft.AspNetCore.Blazor.Templates::3.0.0-preview6.19307.2
通常,您可以通过调用StateHasChanged方法来强制重新渲染。
为了使该应用程序正常工作,您应该将其放置StateHasChanged();在BarCallback方法的末尾...
您还应该在isGranted之前添加“ @”符号,如下所示: @bind="@isGranted"
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
1076 次 |
| 最近记录: |