设置eventcallback时,Blazor eventcallback仅执行一次

设置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

在bazor wasm中,我正在制作一个分页器组件,以向表组件添加分页。paginator组件接受一个事件回调(
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();
    }