【问题标题】:Dynamic method parameter using Blazor Binding [duplicate]使用 Blazor 绑定的动态方法参数
【发布时间】:2019-12-24 05:05:47
【问题描述】:

我正在尝试使用 Blazor 制作分页组件。导航FirstLastPreviousNext 已经在工作。问题是:我希望用户能够点击页码并通过传递页码来执行 NavigateToPage 操作。

这是我的尝试:

<div class="col-12 col-md-6 col-lg-3 offset-lg-6 text-right">
    <nav aria-label="Page navigation example">
        <ul class="pagination justify-content-end">
            <li class="page-item @PuedeNavegarPrimeraPagina">
                <a class="page-link" tabindex="-1" @onclick="NavegarHaciaPrimeraPagina">Primera</a>
            </li>
            <li class="page-item @PuedeNavegarPaginaAnterior">
                <a class="page-link" tabindex="-1" @onclick="NavegarHaciaPaginaAnterior">Anterior</a>
            </li>
            @for (int i = 1; i <= TotalPaginas; i++)
            {
                var clasePaginacionPaginaActual = (PaginaActual == i) ? "disabled" : "";
                <li class="page-item @clasePaginacionPaginaActual"><a class="page-link" @onclick="(() => NavigateToPage(i))">@i</a></li>
            }
            <li class="page-item  @PuedeNavegarPaginaSiguiente">
                <a class="page-link" @onclick="NavegarHaciaPaginaSiguiente">Siguiente</a>
            </li>
            <li class="page-item  @PuedeNavegarUltimaPagina">
                <a class="page-link" @onclick="NavegarHaciaUltimaPagina">Última</a>
            </li>
        </ul>
    </nav>
</div>

NavigateToPage 需要页码,但当前代码总是为所有链接发送相同的值,对应于 i 的最后一个值。如果有 4 个页面,那么无论点击哪个链接,都以 5 为参数。

知道如何获取不同的参数值吗?

【问题讨论】:

  • 对 Blazor 不太熟悉,所以我对此并不完全确定,因此仅将其作为评论。使用表达式函数,您需要在变量被延迟时关闭它们。因此,您可能需要在 for 循环内关闭 i。也许,int pageValue = i; 然后@onclick="(() =&gt; NavigateToPage(pageValue))"&gt; 会起作用。
  • 没错。这不是 Blazor 问题...

标签: c# blazor blazor-server-side


【解决方案1】:

你的 for 循环应该包含一个像这样的局部变量::

@for (int i = 1; i <= TotalPaginas; i++)
            {
                var local = i;
                var clasePaginacionPaginaActual = (PaginaActual == local) ? "disabled" : "";
                <li class="page-item @clasePaginacionPaginaActual"><a class="page-link" @onclick="@(() => NavigateToPage(local))">@i</a></li>
            }

这是标准 C# 行为,其中 lambda 表达式 @(() => NavigateToPage(local)) 可以访问变量而不是变量的值。您必须在 for 循环中定义一个本地变量,否则您的 lambda 表达式将始终调用 NavigateToPage(i) 并且 i 在循环结束时为 5。

【讨论】:

  • 完全忘记了本地范围!谢谢
猜你喜欢
  • 2018-12-21
  • 2018-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
相关资源
最近更新 更多