Blazor动画执行完成后跳转testpage报EditForm参数缺失错误原因排查
问题根因
你遇到的报错和跳转逻辑无关,跳转本身已经执行成功,错误来自testpage组件本身的生命周期逻辑漏洞:
- Blazor组件生命周期中,
OnParametersSet的执行时机早于OnInitializedAsync中异步等待的内容返回时机。你在testpage中将EditContext的初始化放在了await Task.Run()的异步逻辑中,当EditForm执行OnParametersSet校验参数时,EditContext还没有被赋值,仍为null。 - 你写的判断逻辑
@if (projectModel != null)完全起不到拦截渲染的作用:因为projectModel在声明时就已经直接初始化private NewProjectVM projectModel = new();,组件初始化完成后projectModel永远不为null,会直接渲染EditForm,此时EditContext还未完成异步赋值,直接触发参数校验失败的报错。
修复方案
二选一即可:
- 调整渲染判断条件,确保
EditContext初始化完成后再渲染EditForm:
@if (projectModel != null && EditContext != null){ <!-- 原有EditForm代码 --> }
- 移除无意义的异步包装,同步初始化
EditContext:
你的EditContext初始化逻辑没有任何需要异步执行的IO操作,完全不需要套Task.Run,直接同步赋值即可避免异步延迟问题:
protected override void OnInitialized() { EditContext = new EditContext(projectModel); EditContext.OnFieldChanged += EditContext_OnFieldChanged; }
内容的提问来源于stack exchange,提问作者Baba
相关产品推荐
相关产品推荐

