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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:50:55