ASP.NET Core Blazor的 InputRadioGroup绑定失败
我想用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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。