设置eventcallback时,Blazor eventcallback仅执行一次
在bazor wasm中,我正在制作一个分页器组件,以向表组件添加分页。paginator组件接受一个事件回调(设置eventcallback时,Blazor eventcallback仅执行一次,blazor,blazor-webassembly,Blazor,Blazor Webassembly,在bazor wasm中,我正在制作一个分页器组件,以向表组件添加分页。paginator组件接受一个事件回调(PageChanged),该回调在用户更改页面时执行 这里是风景 <div id="paginator-container"> <div id="paginator-controls"> <button type="button" class="btn b
PageChanged
),该回调在用户更改页面时执行
这里是风景
<div id="paginator-container">
<div id="paginator-controls">
<button type="button"
class="btn btn-action"
@onclick="@this.GoToFirstPage"
disabled="@this.IsFirstPage">
<i class="fas fa-angle-double-left"></i>
</button>
<button type="button"
class="btn btn-action"
@onclick="@this.GoToPreviousPage"
disabled="@this.IsFirstPage">
<i class="fas fa-angle-left"></i>
</button>
<span>
page @this.CurrentPage of @this.PageCount
</span>
<button class="btn btn-action"
@onclick="@this.GoToNextPage"
disabled="@this.IsLastPage">
<i class="fas fa-angle-right"></i>
</button>
<button class="btn btn-action"
@onclick="@this.GoToLastPage"
disabled="@this.IsLastPage">
<i class="fas fa-angle-double-right"></i>
</button>
</div>
我可以很好地浏览这些页面
但是,如果我设置回调,像这样
<Paginator Lenght="300"
PageChanged="@this.OnPageChangedTest" />
<p>Page: @pageIndex</p>
<p>page size: @pageSize</p>
@code{
int pageIndex = 1;
int pageSize = 50;
void OnPageChangedTest(InnosysPaginatorContext innosysPaginatorContext)
{
pageIndex = innosysPaginatorContext.CurrentPage;
pageSize = innosysPaginatorContext.PageSize;
}
}
页码:@pageIndex
页面大小:@pageSize
@代码{
int pageIndex=1;
int pageSize=50;
无效OnPageChangedTest(InnosysPaginatorContext InnosysPaginatorContext)
{
pageIndex=innosysPaginatorContext.CurrentPage;
pageSize=innosysPaginatorContext.pageSize;
}
}
按钮只工作一次,我只能进入第2页。随后单击下一页的按钮执行回调,但分页器的CurrentPage
卡在第2页上。
为什么会发生这种情况?问题必须在这里:
this.CurrentPage = 1;
无论何时执行OnParametersSet,都会执行;实际上,您不需要将CurrentPage设置为1。如果您只需要执行一次,那么应该在OnInitialized(异步)对中执行
问题必须在这里:
this.CurrentPage = 1;
无论何时执行OnParametersSet,都会执行;实际上,您不需要将CurrentPage设置为1。如果您只需要执行一次,那么应该在OnInitialized(异步)对中执行
@布莱恩帕克,谢谢你。我修改了代码将其粘贴到这里,但忘记了在粘贴之间修复它。快速提示:在C#中,
这个
对象是隐含的,与JS不同。您不需要指定它(除非试图区分局部方法作用域变量和类值),请参阅我的新答案:@BrianParker,谢谢。我修改了代码将其粘贴到这里,但忘记了在粘贴之间修复它。快速提示:在C#中,这个
对象是隐含的,与JS不同。您不需要指定它(除非试图区分局部方法作用域变量和类值),请参见我的新答案:
this.CurrentPage = 1;
protected override void OnParametersSet()
{
this.SetPageCount();
// this.CurrentPage = 1;
base.OnParametersSet();
}