在上一章节中我们使用HTML的方式介绍了如何在Blazor框架下进行表单的提交,而在Blazor框架中也为我们内置了
<EditForm>组件来代替原始的HTML,<form>,下面我们将对<EditForm>的用法进行讲解,并将两种表单方式进行对比,为大家提供使用的建议。
@page "/SSREditForm"
<h3>SSREditForm</h3>
@rendermode InteractiveServer
<EditForm Model="Model" OnSubmit="Submit">
<div class="mb-3 w-25">
<label for="name" class="form-label">姓名:</label>
<InputText @bind-Value="Model.Name" class="form-control" placeholder="请输入姓名" />
</div>
<div class="mb-3 w-25">
<label for="age" class="form-label">年龄:</label>
<InputNumber @bind-Value="Model.Age" class="form-control" placeholder="请输入年龄" />
</div>
<div class="mb-3 w-25">
<button type="submit" class="btn btn-primary">提交</button>
</div>
</EditForm>
@code {
//页面模型
public User Model { get; set; } = new();
//当用户提交窗体时,该处理程序将被调用。
private void Submit()
{
Console.WriteLine($"输入姓名:{Model.Name}");
Console.WriteLine($"输入年龄:{Model.Age}");
}
//模型类
public class User
{
public string? Name { get; set; }
public int Age { get; set; }
}
}
静态 SSR 中,不能使用事件处理程序,所以要以 HTTP 的方式提交表单 需要使用POST访问,并指定@formname,对应的表单接收类需要使用特性进行接收,其他方面与交互式SSR一致
[SupplyParameterFromForm(FormName = "StaticSSREditForm")]
public User Model { get; set; } = new();@page "/SSREditForm"
<h3>SSREditForm</h3>
@rendermode InteractiveServer
<EditForm Model="Model" OnSubmit="Submit" method="post" FormName="StaticSSREditForm">
<div class="mb-3 w-25">
<label for="name" class="form-label">姓名:</label>
<InputText @bind-Value="Model.Name" class="form-control" placeholder="请输入姓名" />
</div>
<div class="mb-3 w-25">
<label for="age" class="form-label">年龄:</label>
<InputNumber @bind-Value="Model.Age" class="form-control" placeholder="请输入年龄" />
</div>
<div class="mb-3 w-25">
<button type="submit" class="btn btn-primary">提交</button>
</div>
</EditForm>
@code {
//页面模型
[SupplyParameterFromForm(FormName = "StaticSSREditForm")]
public User Model { get; set; } = new();
//当用户提交窗体时,该处理程序将被调用。
private void Submit()
{
Console.WriteLine($"输入姓名:{Model.Name}");
Console.WriteLine($"输入年龄:{Model.Age}");
}
//模型类
public class User
{
public string? Name { get; set; }
public int Age { get; set; }
}
}<EditForm> 与 原生<form>比对<EditForm>中可以使用内置的Razor组件,提供了更加便捷的操作特性
<form>中无法使用内置的Razor组件
<EditForm>:
<form>:
<EditForm>:
<DataAnnotationsValidator>、<ValidationSummary>。<form>:
<EditForm>:
提供专用事件:
- OnValidSubmit:验证通过时触发。
- OnInvalidSubmit:验证失败时触发。
OnSubmit:自定义提交逻辑。<form>:
<EditForm>:
在 Blazor 渲染生命周期内工作,避免整页刷新(SPA 体验)。
自动管理 UI 更新(如验证错误消息)。
<form>:
默认整页刷新(破坏 SPA 体验),除非显式阻止。
需手动更新 UI 状态(如显示错误信息)。