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

Blazor Server中OnPostAddAsync方法无法触发问题求助

问题排查与修复方案

核心问题:Razor Pages未在Blazor Server项目中配置

你标注的是Blazor Server项目,但当前代码使用的是Razor Pages(.cshtml + PageModel)技术。Blazor Server默认不启用Razor Pages的路由机制,导致表单提交的POST请求无法匹配到OnPostAddAsync方法,最终只触发了OnGetAsync,表现为页面刷新、输入数据丢失、数据库无新增记录。

修复步骤:

  1. 在Program.cs中添加Razor Pages服务:
    builder.Services.AddRazorPages();
    
  2. 在端点配置中注册Razor Pages路由:
    app.MapRazorPages();
    // 放在MapBlazorHub()前后均可
    app.MapBlazorHub();
    

次要问题:日期字段绑定失败

Risk模型的DateIdentified属性默认被初始化为DateTime.MinValue(0001-01-01),而HTML的date输入框不支持该日期范围,会导致模型绑定失败,即使触发了OnPostAddAsync也无法通过验证。

修复方式(二选一):

  • 初始化DateIdentified为合法日期:
    public IndexModel(ApplicationDbContext dbContext, RiskService riskService, ILogger<IndexModel> logger)
    {
        _dbContext = dbContext;
        _riskService = riskService;
        NewRisk = new Risk()
        {
            DateIdentified = DateTime.Today
        };
        _logger = logger;
    }
    
  • 将DateIdentified改为可空类型(允许用户不填写日期):
    public DateTime? DateIdentified { get; set; }
    

额外验证步骤

  1. 检查表单action是否正确生成:右键页面→查看源代码,确认表单标签的action属性为"/?handler=Add",如果未生成,手动指定:
    <form asp-page="/Index" asp-page-handler="Add" method="post">
    
  2. 增加模型错误日志排查:在OnPostAddAsync的ModelState.IsValid判断中添加错误输出,方便定位绑定问题:
    if (!ModelState.IsValid)
    {
        foreach (var error in ModelState.Values.SelectMany(v => v.Errors))
        {
            _logger.LogError("模型验证错误: {Msg}", error.ErrorMessage);
        }
        return Page();
    }
    

内容的提问来源于stack exchange,提问作者Tzimue

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:14:50