ASP.NET Core Blazor的 InputRadioGroup绑定失败

前端开发 2026-07-09

我想用ASP.NET Core Blazor将一组单选按钮绑定到模型。

可惜我没能让它工作,尽管我在网上查了很多。

以下是唯一的Index.razor文件的代码:

@page "/"
<!doctype html>
<html lang="en">
<head>
  <!-- Required meta tags -->
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
  <!-- Bootstrap CSS -->
  <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB" crossorigin="anonymous">
  <title>Example</title>
</head>
<body>
  <div class="container">
    <div class="jumbotron">
      <EditForm EditContext="editContext" FormName="uniqueForm">
        <fieldset class="row mb-3">
          <legend class="col-form-label col-sm-2 pt-0">Checksum type:</legend>
          <div class="col-sm-10">
            <InputRadioGroup Name="number" @bind-Value="model.Selected">
            <div class="form-check">
              <InputRadio Name="number" Value="1" class="form-check-input" />
              <label class="form-check-label">
                One
              </label>
            </div>
            <div class="form-check">
              <InputRadio Name="number" Value="2" class="form-check-input" />
              <label class="form-check-label">
                Two
              </label>
            </div>
            </InputRadioGroup>
          </div>
        </fieldset>
      </EditForm>
      <div>
        Selected: @model.Selected
      </div>
    </div>
  </div>
</body>
</html>

@code
{
  private Model model = new();

  private EditContext? editContext;

  protected override void OnInitialized()
  {
    model = new();
    editContext = new EditContext(model);
  }

  public class Model
  {
    public int Selected { get; set; }
  }
}

我已经把单选输入的值绑定到了model.Selected。

接着我打算在一个单独的

中使用它们,正如标记末尾所示。

但在网页上点击单选按钮时,那个div没有任何变化,只显示0。

你知道这是为什么吗?是不是和我的整体应用设置有关?我可以提供这个网页项目的所有文件。我使用的是Visual Studio Code。

解决方案

因为你的页面中包含 <html> 标签,你很可能在使用新的.NET 8+ Blazor Web App模板。默认情况下,页面使用的是 静态服务器端渲染(Static SSR),也就是说页面只渲染一次,且没有实时连接来监听点击事件。

添加交互式渲染模式有望解决你的问题。 将此属性直接放在 @page "/" 指令之下,以启用实时UI更新。

@attribute [RenderModeInteractiveServer]

注:在像 Index.razor 这样的单独页面组件中包含 <!doctype html><head><body> 标签通常并不推荐。这些结构性布局标签应放在根目录的 App.razor 文件中,而你的页面应只包含实际内容和表单控件。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章