Blazor Server(.NET 8)中EditForm提交时Model始终为空的问题
问题排查与解决方法
1. 确认组件使用交互式渲染模式(.NET8 默认静态渲染导致绑定失效)
.NET8 Blazor 默认采用静态服务器渲染,静态组件无法处理表单交互绑定,这是导致模型属性无法填充的最常见原因。需为组件显式指定交互式渲染模式:
在组件顶部添加:
@rendermode InteractiveServer
完整组件开头示例:
@page "/AddAsset" @rendermode InteractiveServer @inject ICreateAssetUseCase CreateAssetUseCase @inject NavigationManager NavigationManager
2. 检查模型命名空间引用
确保组件中正确引用了CreateAssetRequest模型的命名空间,否则可能创建错误实例或编译失败:
在组件顶部添加命名空间引用:
@using Loggerv2.UseCases.Assets.Requests
也可在项目根目录的_Imports.razor中全局添加该命名空间,避免每个组件重复引用。
3. 移除潜在冲突的FormName属性
EditForm的FormName属性若与其他表单重名,可能导致绑定异常,可暂时移除该属性测试:
<EditForm Model="@createAssetRequest" OnValidSubmit="@HandleValidSubmit">
4. 优化模型实例的绑定跟踪
将模型字段改为自动属性(Blazor 对属性的绑定跟踪更稳定):
@code { private CreateAssetRequest CreateAssetRequest { get; set; } = new(); private async Task HandleValidSubmit() { await CreateAssetUseCase.ExecuteAsync(CreateAssetRequest); NavigationManager.NavigateTo("/Assets"); } }
同时更新对应的InputText绑定:
<InputText id="name" class="form-control" @bind-Value="CreateAssetRequest.Name" /> <InputText id="description" class="form-control" @bind-Value="CreateAssetRequest.Description" />
5. 排查验证逻辑干扰
若后续为模型添加了数据验证属性(如[Required]),需确保验证通过才会触发OnValidSubmit。可临时移除验证组件测试提交是否能获取值:
<EditForm Model="@createAssetRequest" OnValidSubmit="@HandleValidSubmit"> <!-- 临时移除验证组件测试 --> <!-- <DataAnnotationsValidator /> --> <!-- <ValidationSummary /> --> <!-- 表单字段 --> </EditForm>
内容的提问来源于stack exchange,提问作者Tim Eulink
相关产品推荐
相关产品推荐

