blazor 服务器查询字符串:如何只获取一次数据
blazor server query string: how to get data only one time
在 blazor 页面上,我们需要从查询字符串中获取数据。
我们使用OnInitialized
事件读取数据:
Working with Query Strings in Blazor
例如:
protected override void OnInitialized()
{
var uri = NavManager.ToAbsoluteUri(NavManager.Uri);
if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("initialCount", out var _initialCount))
{
currentCount = Convert.ToInt32(_initialCount);
}
}
但是我们使用预渲染:
@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))
和此代码 .
这是个问题,因为我们需要使用这些参数访问数据库,但我们不想执行两次。
禁用预渲染不是一个选项。
试图将代码移动到其他事件,例如移动到 OnParametersSet
,但它也执行了两次。
也许我们可以检查事件是第一次还是第二次执行并使用这个条件?
或者其他一些选择?
我认为在 .Net5 中没有安全的方法来执行此操作 - 您已使用 .Net5 标记了您的问题。
.Net6 添加了persist-prerendered-state
,我认为这将解决您的问题。这是解释如何使用它的 MS-Docs 页面的 link:
在 blazor 页面上,我们需要从查询字符串中获取数据。
我们使用OnInitialized
事件读取数据:
Working with Query Strings in Blazor
例如:
protected override void OnInitialized()
{
var uri = NavManager.ToAbsoluteUri(NavManager.Uri);
if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("initialCount", out var _initialCount))
{
currentCount = Convert.ToInt32(_initialCount);
}
}
但是我们使用预渲染:
@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))
和此代码
这是个问题,因为我们需要使用这些参数访问数据库,但我们不想执行两次。
禁用预渲染不是一个选项。
试图将代码移动到其他事件,例如移动到 OnParametersSet
,但它也执行了两次。
也许我们可以检查事件是第一次还是第二次执行并使用这个条件?
或者其他一些选择?
我认为在 .Net5 中没有安全的方法来执行此操作 - 您已使用 .Net5 标记了您的问题。
.Net6 添加了persist-prerendered-state
,我认为这将解决您的问题。这是解释如何使用它的 MS-Docs 页面的 link: