1

在过去的几天里,我试图在我的 blazor 应用程序中读出浏览器分辨率。我正在尝试这样做: [JSInvokable] Blazor Methode 由 JS 脚本调用。

1.我的问题是:宽度和高度只有在我重新加载(手动刷新)页面后才会显示在我的 blazorpage 中。我不能调用 this.StateHasChanged() 因为我的方法是静态的。

如何调用 StateHasChanged 或者我需要做什么来显示新数据?我对 ASP.net 等很陌生,所以如果可能的话,请提供一个代码示例;)

这是我的 Code blazor(服务器端)代码:

@page "/"
@inject IJSRuntime jsRuntime
<h1>Window Dimensions</h1>

<p>Window Width: @Width</p>
<p>Window Height: @Height</p>
<p>@DebugString</p>

@code {
    public static int Width;
    public static int Height;
    public static string DebugString;

    [JSInvokable]
    public static async Task GetBrowserDimensions(int width, int height)
    {
        Width = width;
        Height = height;
        if (Width < 600)
        {
            DebugString = "small_UI";
        }
        if (Width >= 600)
        {
            DebugString = "big_UI";
        }
    }
}

这里是我的 .js 代码:

//------JS Code for the resize stuff incl. timer so that resize doesnt fire every pixel move
var resizeId;
window.addEventListener('resize', function () {
    clearTimeout(resizeId);
    resizeId = setTimeout(doneResizing, 500);
});

function doneResizing() {
    var width= window.innerWidth;
    var height= window.innerHeight;
    alert('Width: ' +width + '  Height: ' +height);
    DotNet.invokeMethodAsync('Blazor_PageResolutionJS', 'GetBrowserDimensions', width, height);
}
//^^^^^^JS Code for the resize stuff incl. timer so that resize doesnt fire every pixel move

2. 为了做出用户界面设计选择,这是一种获得浏览器分辨率的好技术吗?

感谢您阅读

4

1 回答 1

2

您可以通过安装 NuGet 包https://www.nuget.org/packages/BlazorPro.BlazorSize/来绕过对此的需求

如果您仍然对自己编写代码感兴趣,可以在https://github.com/EdCharbeneau/BlazorSize/tree/master/BlazorSize找到 BlazorSize 的源代码

从 JavaScript 调用 StateHasChanged 的​​解决方案涉及在 .NET 中使用 [JsInvokable] 方法。但是,如果您查看 BlazorSize 的源代码,您会注意到,一旦您完成了从 DOM 中正确删除事件侦听器的工作,还需要做很多额外的工作。

于 2020-10-07T12:35:29.433 回答