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
相关产品推荐
相关产品推荐

