You need to enable JavaScript to run this app. .Net 5 Blazor Server应用调用WebApi后Razor页属性为null但代码后台已有数据
优惠活动
大模型
产品
解决方案
定价
更多

.Net 5 Blazor Server应用调用WebApi后Razor页属性为null但代码后台已有数据

问题根因

你遇到的绑定属性始终为null的问题,核心是变量作用域遮蔽导致类属性从未被真正赋值:

  • SearchDocumentNumbers方法内部使用var DocumentNumbers = ...声明了和类级公共属性DocumentNumbers完全同名的局部变量
  • 这个局部变量的作用域仅存在于方法执行周期内,会完全遮蔽同名的类属性,你从接口拿到的返回值全部赋值给了这个临时局部变量,类的公共属性自始至终没有被写入任何值,自然一直保持初始的null状态。
修正方案
  • 调整方法内的赋值逻辑,去掉局部变量的var声明,直接将接口返回值赋值给类级的DocumentNumbers属性:
// 修正后的SearchDocumentNumbers方法实现
protected async Task SearchDocumentNumbers()
{
    ProjNumber = "1012100100";
    // 直接给类属性赋值,不声明同名局部变量
    DocumentNumbers = await DocumentNumbersDataService.GetDocumentNumbersAsync(ProjNumber);
}
  • 规避按钮与原生form的行为冲突:
    当前按钮放在method="get"的原生form中,同时绑定了Blazor的@onclick事件,会触发原生form的整页提交跳转,打断Blazor的交互流程。给按钮加上type="button"标识,取消原生提交行为,确保Blazor事件能正常触发后续的列表渲染。
  • 简化方法签名:
    原方法返回的Task<IEnumerable<DocumentNumberDto>>没有实际UI绑定作用,Blazor事件处理方法统一返回Task即可,不需要携带多余的返回值。
补充说明

Blazor Server在UI事件触发完成后,会自动检测组件参数和属性的变更并触发重渲染,只要正确给类属性赋值,页面上的列表渲染逻辑就能正常执行,不需要额外手动调用StateHasChanged方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 17:06:04