在提交表单之前重置属性值

问题描述 投票:0回答:1

我有一个静态渲染的

EditForm
,它负责提交模型,以便我可以将其添加到我的数据库中。

@page "/Test"
@using Domain.Entities

<h3>Test</h3>

<EditForm Model="@Model" OnSubmit="@HandleSubmitted" FormName="CreateModel" Enhance>
    <InputText @bind-Value="@Model.Name"></InputText>
    <button type="submit" > Submit</button>
</EditForm>

@code {
    [SupplyParameterFromForm]
    private TestModel Model { get; set; } = new();

    protected override void OnInitialized()
    {
        Console.WriteLine($"Initialized: {Model}");
    }

    private void HandleSubmitted(EditContext obj)
    {
        Console.WriteLine($"Submitted: {Model}");
    }
}
public record TestModel
{
    public Guid Id { get; set; } = Guid.NewGuid();

    public string Name { get; set; } = "";
}

这是日志输出(刷新页面、编辑名称、提交表单):

Initialized: TestModel { Id = 9e8e339a-cccc-499e-9f1e-76883657530d, Name =  }
Initialized: TestModel { Id = 00000000-0000-0000-0000-000000000000, Name = New Name }
Submitted: TestModel { Id = 00000000-0000-0000-0000-000000000000, Name = New Name }

我希望提交表单时 Id (9e8...) 不会重置。我不确定我是否遗漏了一些概念或者我是否没有正确设置表单。我想找到一种正确的方法来提交带有有效 ID 的表单。

我之前尝试将 Id 添加为可编辑字段,这似乎解决了问题 - 它不再提交空的 guid。但是,我不想在这个阶段向最终用户公开 Id。我不认为拥有该 Id 输入字段并将其设置为隐藏是实际的方法吗?

forms asp.net-core post blazor
1个回答
0
投票

据我了解,只想提交模型的一部分。您可以尝试创建一个“部分模型”,其中仅包含要更改的字段,然后在初始化时获取部分模型值。您可以尝试以下操作:

<EditForm Model="@onlyName" OnSubmit="@HandleSubmitted" FormName="CreateModel" Enhance>
    <InputText @bind-Value="@onlyName"></InputText>
    <button type="submit"> Submit</button>
</EditForm>

@code {
    [SupplyParameterFromForm]
    private string? onlyName { get; set; } = "";

    private TestModel Model { get; set; } = new();

    protected override void OnInitialized()
    {
        Model.Name = onlyName;
        Console.WriteLine($"Initialized: {Model}");
    }

    private void HandleSubmitted(EditContext obj)
    {
        Console.WriteLine($"Submitted: {Model}");
    }
}

测试结果
同样,“唯一名称”可以是具有多个字段的对象。

© www.soinside.com 2019 - 2024. All rights reserved.