我试图找出一些简单数据的主/详细视图。我有一份食谱清单,每个食谱都有一份配料清单。
我有一个列出所有食谱的食谱页面,这很好用。我有一个 RecipeDetail 剃须刀组件,一旦从“食谱”页面中选择了一个食谱,它就应该获取成分列表。
我尝试过各种各样的事情。我尝试通过将完全填充的 Recipe 及其成分传递给 RecipeDetail 组件来进行数据绑定,但由于数据结构的原因,GetJsonAsync 方法检测到循环引用并引发异常。我尝试通过绑定到“配方”页面上的变量的参数,将从“配方”页面选择的配方的 ID 向下传递到“配方详细信息”页面,但从未触发数据获取。
@page "/recipes"
@using BlazorApp.Shared.Models
@inject HttpClient Http
<h1>Recipes</h1>
@if(RecipesArray != null)
{
@foreach (var r in RecipesArray)
{
<h3 @onclick="@(() => SelectRecipe(r))">@r.Title</h3>
}
}
<RecipeDetail RecipeId="@SelectedRecipeId"></RecipeDetail>
@code {
Recipe[] RecipesArray;
int SelectedRecipeId;
protected override async Task OnInitializedAsync()
{
RecipesArray = await Http.GetJsonAsync<Recipe[]>("Recipes");
}
protected void SelectRecipe(Recipe recipe)
{
SelectedRecipeId = recipe.Id;
}
}
以下在技术上有效,但是当我取消注释提取时,它不再有效。应用程序冻结。
@using BlazorApp.Shared.Models
@inject HttpClient Http
<h1>RecipeId = @selectedRecipeId</h1>
@if (Ingredients != null && Ingredients.Length > 0)
{
<h1>@RecipeId</h1>
<ul>
@foreach (var item in Ingredients)
{
<li>@item.Ingredient.ToString()</li>
}
</ul>
}
@code {
private int selectedRecipeId;
RecipeIngredient[] Ingredients;
[Parameter]
public int RecipeId
{
get { return selectedRecipeId; }
set
{
selectedRecipeId = value;
//if (value > 0)
// Ingredients = Http.GetJsonAsync<RecipeIngredient[]>($"Recipes/{RecipeId}").Result;
}
}
}
我很乐意修复 JSON 错误并绑定到传递的对象,但我也找不到解决方案。我尝试了属性 [JsonIgnore] 但这没有帮助。
即使 Json fetch 是固定的,我认为我仍然有一个用例可以在参数更改后重新获取数据,所以我想了解在这两种情况下我做错了什么。