.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
相关产品推荐
相关产品推荐

