20

我刚开始学习如何使用 Blazor 模板制作网站。但我不知道如何将数据从一页传递到另一页。它与 .NET CORE MVC Web 应用程序有点不同,我找不到这方面的示例。

    <p>Solve This problem: @rnd1 * @rnd2 = ?</p>

    <input type="text" name="result" bind="@result" />
    <input type="button" onclick="@calculate" value="Submit" />

我想将文本框中的值发送到另一个页面。我怎样才能做到这一点?

4

2 回答 2

34

您可以将其作为参数传递。

在您要导航到的页面中,将参数添加到您的路线:

@page "/navigatetopage/{myvalue}"

并确保该参数存在于该页面中:

[Parameter]
private string myvalue{ get; set; }

在同一页面中,您可以在以下位置获取:

protected override void OnParametersSet()
{
    //the param will be set now
    var test = myvalue;
}

现在在您的起始页中,确保导航到包含值的第二页:

uriHelper.NavigateTo($"/navigatetopage/{result}");

uriHelper 需要像这样注入:

@inject Microsoft.AspNetCore.Blazor.Services.IUriHelper uriHelper

在 preview-9 上更新 PREVIEW- 9 你应该使用 navigationManager 而不是 uriHelper,它也有一个NavigateTo方法

@inject Microsoft.AspNetCore.Components.NavigationManager navigationManager
于 2018-07-07T20:52:41.537 回答
2

我个人更喜欢将查询字符串添加到 url。

例如,当我想在页面加载时预选标签时:

像这样调用网址http://localhost:5000/profile?TabIndex=2

在您的代码中,您可以使用NavigationManagerQueryHelpers解析它

添加using Microsoft.AspNetCore.WebUtilities;

然后覆盖其中一种生命周期方法并解析查询参数

protected override void OnAfterRender(bool firstRender)
    {
        if (firstRender)
        {
            Uri uri = this.Nav.ToAbsoluteUri(this.Nav.Uri);
            if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("TabIndex", out StringValues values))
            {
                if (values.SafeAny())
                {
                    _ = int.TryParse(values.First(), out int index);
                    this.TabIndex = index;
                }
            }
        }
    }
于 2020-12-20T15:38:32.427 回答