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

Blazor .NET 8提交EditForm时获取值为空,如何解决?

解决Blazor EditForm绑定值为空的问题

核心原因:绑定目标为字段而非属性

Blazor的双向绑定(@bind/@bind-Value)要求绑定对象是带get/set访问器的属性,而非字段。你的代码中game是字段类型,导致输入值无法同步到模型实例。

具体修复步骤

1. 将game字段改为属性

在@code块中,把字段声明替换为属性:

private Game Game { get; set; } = new Game()
{
    Genre = string.Empty,
    Name = string.Empty
};

2. 更新EditForm与输入组件的绑定引用

修改EditForm的Model参数和InputText的绑定目标,指向新的属性:

<EditForm Model="@Game" OnSubmit="HandleSubmit" FormName="a">
  <div class="mb-3">
   <label for="name" class="form-label">Name:</label>
   <InputText id="name" @bind-Value="Game.Name" class="form-control" />
  </div>
  <div class="mb-3">
   <label for="genre" class="form-label">Genre:</label>
   <InputText id="genre" @bind-Value="Game.Genre" class="form-control" />
  </div>
  <button type="submit" class="btn btn-primary">PLEASE WORK</button>
</EditForm>

3. 可选:添加表单验证组件(增强提交可靠性)

虽然不是绑定为空的直接原因,但添加验证组件可确保模型符合required约束,避免无效提交:

<EditForm Model="@Game" OnSubmit="HandleSubmit" FormName="a">
  <DataAnnotationsValidator />
  <ValidationSummary />
  
  <!-- 原有输入组件代码 -->
</EditForm>

4. 验证提交方法中的模型值

修改后的HandleSubmit方法可正确获取输入值:

private void HandleSubmit()
{
    Console.WriteLine($"Submitted: Name={Game.Name}, Genre={Game.Genre}, Price={Game.Price}");

    GameClient.AddGame(Game);
    NavigationManager.NavigateTo("/");
}

额外排查点

  • 确认Game类的命名空间已通过@using Models正确导入
  • 确保使用.NET 6及以上版本的Blazor,双向绑定语法更稳定
  • 检查无其他代码逻辑覆盖Game实例的属性值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 20:35:25