asp.net 如何在Blazor中从.NET 7中的链接获取ID?

ztyzrc3y  于 3个月前  发布在  .NET
关注(0)|答案(1)|浏览(96)

当我打开页面与id链接我在浏览器中有错误.我有一个假设,以这种方式,它是指某种端点,但我不明白我如何才能使它,使我可以从链接的ID
我有页面UpdateWalletType.razor
我想通过这种方式从链接中获取ID

@page "/update-wallet-type/{walletTypeId}"

@code {
    private UpdateWalletTypeByIdDto _newWalletType;

    private WalletTypeDto existingWalletTypeDto = new WalletTypeDto();

    protected override async Task OnInitializedAsync()
    {
        var walletTypeId = NavigationManager.Uri.Split('/').Last();
        existingWalletTypeDto = await HttpClient.GetFromJsonAsync<WalletTypeDto>($"getWalletTypeById/{walletTypeId}");

    }

}

字符串
我在构建时没有任何错误,但当我打开page /update-wallet-type/id时,我在浏览器控制台中出现此错误
“Endava.TechCourse.BankApp.Client.Pages.WalletTypes.UpdateWalletType”没有与名称“walletTypeId”匹配的属性。System.InvalidOperationException:类型“Endava.TechCourse.BankApp.Client.Pages.WalletTypes.UpdateWalletType”的对象没有与名称“walletTypeId”匹配的属性。
解释我做错了什么以及如何解决?

hs1ihplo

hs1ihplo1#

您遇到的错误是由于UpdateWalletType组件没有名为walletTypeId的属性,而您试图在OnInitializedAsync方法中访问它。要解决此问题,您可以将名为walletTypeId的公共属性添加到UpdateWalletType组件,并使用该属性获取数据。以下是如何修改组件的示例:
csharp

@code {
    private UpdateWalletTypeByIdDto _newWalletType;

    private WalletTypeDto existingWalletTypeDto = new WalletTypeDto();

    // Add a public property to store the walletTypeId
    [Parameter]
    public string WalletTypeId { get; set; }

    protected override async Task OnInitializedAsync()
    {
        // Use the WalletTypeId property instead of trying to extract it from the URL
        existingWalletTypeDto = await HttpClient.GetFromJsonAsync<WalletTypeDto>($"getWalletTypeById/{WalletTypeId}");
    }
}

字符串
现在,当您导航到/update-wallet-type/id页面时,您需要将id作为参数传递。如果您使用的是RouteView或NavLink,则可以像这样传递参数:
HTML

<NavLink href="/update-wallet-type/123">Update Wallet Type</NavLink>


确保将123替换为您想要获取的实际ID。这样,WalletTypeId属性将在组件初始化时设置,并且您不会遇到上述错误。

相关问题