You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor静态渲染EditForm提交时Model的Id被重置问题求助

Blazor静态渲染EditForm提交时模型Guid被重置为空的解决方法

问题原因

使用[SupplyParameterFromForm]和带Enhance的静态渲染EditForm时,表单提交后框架会通过模型绑定重建TestModel实例。由于表单里没有包含Id对应的输入控件,模型绑定无法获取初始生成的Guid值,Id会被设为Guid的默认空值,而非构造函数生成的初始值。

解决方法

1. 使用隐藏输入字段(推荐)

这是Web表单传递用户不可编辑字段的标准方案,既不会暴露Id给用户,又能在提交时保留初始Guid:

@page "/Test"
@using Domain.Entities

<h3>Test</h3>

<EditForm Model="@Model" OnSubmit="@HandleSubmitted" FormName="CreateModel" Enhance>
    <!-- 添加隐藏字段绑定Id -->
    <InputHidden @bind-Value="@Model.Id" />
    <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}");
    }
}

添加后提交表单,Id会保留初始生成的值,日志输出会符合预期。

2. 调整Id生成逻辑(按需选择)

如果业务允许,可将Id生成逻辑移到服务器端(比如数据库自动生成),前端无需初始化Id:

public record TestModel
{
    public Guid Id { get; set; } // 由数据库或服务器处理生成
    public string Name { get; set; } = "";
}

之后在提交后的处理代码中生成Id再写入数据库,避免前端传递Id的问题。

内容的提问来源于stack exchange,提问作者Sheim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:33:25