Blazor点击按钮发起异步GET请求后HTML页面不更新问题
问题根因
你的theResponse始终为null和Blazor的绑定机制、StateHasChanged无关,核心是后端接口返回的JSON结构与前端反序列化使用的类型不匹配:
你在控制器中返回的是Json(new { data = yourdata }),最终响应的JSON结构为:
{ "data": { "note1": "YouHitTheGetRequest" } }
而你前端调用GetFromJsonAsync<Notes>时,会直接把响应根节点的JSON和Notes类做字段匹配,根节点下没有note1字段,只有data字段,自然反序列化失败得到null。
修复方案
两种方案任选其一即可:
方案1:修改后端接口(推荐)
直接返回Notes对象即可,ASP.NET Core的ApiController会自动将返回值序列化为符合要求的JSON,不需要额外包匿名对象:
[HttpGet] [Route("[action]")] [ActionName("Action4")] public async Task<Notes> myStringResult1() { Notes myNotes = new Notes(); myNotes.note1 = "YouHitTheGetRequest"; return myNotes; }
方案2:适配后端结构修改前端代码
如果不需要改后端,可以新增一个通用包装类适配后端的返回结构,再提取目标数据:
// 新增通用响应包装类 public class ApiResponse<T> { public T data { get; set; } } // 修改请求逻辑 private async Task TestPost() { var apiRes = await Http.GetFromJsonAsync<ApiResponse<Notes>>("Test/Action4"); theResponse = apiRes?.data; }
其他注意事项
你的按钮命名为Test POST但实际发送的是GET请求,属于命名不规范的小问题,不影响运行但建议调整保持语义一致。
内容的提问来源于stack exchange,提问作者Novorfay
相关产品推荐
相关产品推荐

