循环内的 Blazor 导航?

Posted

技术标签:

【中文标题】循环内的 Blazor 导航?【英文标题】:Blazor navigation from within a loop? 【发布时间】:2021-09-11 05:49:29 【问题描述】:

所以我正在尝试制作一个显示客户数据的 Blazor 应用程序。当显示所有客户时,我希望能够导航到单个客户。我无法完成这项工作。主要概念在下面的代码中,我也有预期的模型。

           @for(int i = 0; i < customers.Length-1; i++)
            
            
                <tr>
                    <td>@customer.Id</td>
                    <td>@customer.CustomerId</td>
                    <td>@customer.LastName</td>
                    <td>@customer.FirstName</td>
                    <td>@customer.Name1056Form</td>
                    <td>@customer.TrapezeClientId</td>
                    <td>@customer.CustomerNote</td>
                    <td @onclick="NavToCustomer(i)"> Details</td>
                </tr>



      private void NavToCustomer(int i)
      
       int Id = i;
        navigation.NavigateTo("/Customer/" + Id);

       
          

【问题讨论】:

I am having trouble making this work. - 你能详细说明一下吗?什么不工作? 您好,我收到“无法从 'void' 转换为 'Microsfot.AspNetCore.Components.EventCallBack'”错误。 这能回答你的问题吗? C# Blazor WebAssembly: Argument 2: cannot convert from 'void' to 'Microsoft.AspNetCore.Components.EventCallback' 【参考方案1】:
<td @onclick="()=>NavToCustomer(@customer.Id)"> Details</td>


private void NavToCustomer(int custID)

    navigation.NavigateTo("/Customer/" + custID);

解释:原版@onclick sends 有自己的参数(您可以通过将鼠标悬停在标记中的“@onclick”上来查看它们是什么)。您的事件处理程序不处理 MouseEventArgs,因此签名不匹配。您想发送自定义信息,因此您应该使用 lambda 表达式。

--编辑--

再想一想,你可以直接这样做吗?

<td @onclick="()=>navigation.NavigateTo("/Customer/" + customer.Id)"> Details</td>

【讨论】:

以上是关于循环内的 Blazor 导航?的主要内容,如果未能解决你的问题,请参考以下文章

Blazor University (27)路由 —— 检测导航事件

Blazor University (26)路由 —— 通过代码导航

使用 Blazor 开发内部后台:基于Card组件快速搭建导航首页

Blazor University (25)路由 —— 通过 HTML 导航

Blazor Navigationmanager 取消在 locationchanged 上的导航

组件内的 Blazor 双向绑定文本区域