我目前遇到一个问题,即从我的api获取数据后,视图仍然认为数据为空。请参见以下代码:
查看:
@if (goals == null)
{
<Loader />
}
else if (goals.Count == 0)
{
<div class="center-text">
<h2>It doesn't look like you have any goals create yet!</h2>
</div>
}
else
{
<h1>found stuff!</h1>
}
@functions {
List<GoalViewModel> goals;
protected override async Task OnInitAsync()
{
var token = await LocalStorage.GetItem<string>("AuthToken");
var httpClient = HttpClientExtensions.GetAuthHttpClient(token);
goals = await httpClient.GetJsonAsync<List<GoalViewModel>>(ClientSettings.GetHostRoot() + "/api/Goals/");
}
}
被击中的控制器动作如下所示(我已验证它已被正确调用并正在通过chrome网络标签和提琴手返回数据):
[HttpGet]
public IActionResult Get()
{
try
{
var goalIndexDtos = _goalManager.GetAll(_claimResolver.User.FindFirstValue(ClaimTypes.NameIdentifier));
var goalViewModels = Mapper.Map<List<GoalViewModel>>(goalIndexDtos);
return Ok(goalViewModels);
}
catch (Exception ex)
{
log.Error(FormatError(nameof(GoalsController), nameof(Get), ex));
return BadRequest(ex);
}
}
我的问题是<Loader />
总是显示,而我应该看到<h1>found stuff!</h1>
,因为我的控制器正在适当地返回数据,并且blazor视图代码已成功对数据进行反序列化。
我在这里想念什么?我在应用程序的其他地方也做非常相似的事情,它们似乎工作正常。我已经一遍又一遍地将该用例与其他用例进行了比较,没有发现任何不同。
在从服务器检索目标的调用之后,我甚至还停留了Console.WriteLine(goals.Count);
行,它正确地将1
打印到控制台。
更新:在尝试了所有可能的内容之后,我从db表中删除了要检索goals
的所有数据。这将从我的控制器返回一个空列表。在这种情况下,<h2>It doesn't look like you have any goals create yet!</h2>
确实可以打印!但是,第二秒钟我添加一行,并返回一个计数为1的列表,我得到的只是一个加载器
已解决:多次清洗,构建,重建和关闭/打开Visual Studio之后,我的问题仍然存在。只是在重新启动计算机后,它才能按预期开始工作。