.net 为什么服务器端Blazor不更新文本框?

6za6bjd0  于 2023-10-21  发布在  .NET
关注(0)|答案(2)|浏览(142)

我有一个简单的表格来收集用户信息。我希望它填充我的用户的电子邮件时,他们打开的形式。由于某种原因,它不工作,尽管是一个非常简单的事情。我使用的是服务器端的Blazor。
这是我的文本框:

<input type="text" @bind="Email.ReplyTo"/>

这是我的OnInitializedAsync(),关键是User。Email有我期望的字符串,它不是null或空白或任何东西。

protected override async Task OnInitializedAsync()
{
    Email.ReplyTo = User.Email;
}

为什么Blazor没有更新文本框?

rsaldnfx

rsaldnfx1#

为什么Blazor没有更新文本框?
因为你还有很多事没告诉我们!
下面是一个基于问题中提供的少量信息的 * 最小可重复示例 *。
有时灵

@page "/"

<PageTitle>Index</PageTitle>

<h1>Hello, world!</h1>

<input class="form-control mb-3" type="text" @bind="_model.ReplyTo" />

<div class="alert alert-primary">
    @_model.ReplyTo
</div>
@code{
    private Email _model = new();
    private User _user = new("[email protected]");

    protected override async Task OnInitializedAsync()
    {
        // Pretend to get the data from somewhere
        await Task.Delay(10);
        _model.ReplyTo = _user.Email;
    }

    public record User(string Email);

    public class Email
    {
        public string ReplyTo { get; set; } = string.Empty;
    }
}
wb1gzix0

wb1gzix02#

只需使用OnAfterRenderAsync Bacuse你的DOM在OnInitializedAsync()方法之前执行,你也可以在Email.ReplyTo = User.Email;之后使用StateHasChanged()方法,但这并不好。

protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            Email.ReplyTo = User.Email;
        }
    }

相关问题