是否可以将异步函数结果添加到 table 行中?
Is this possible to add async function result into table row?
我正在为我的 REST API 创建网络客户端,我想向我的 table 添加一个包含异步函数结果的字段。
@foreach(Product item in products)
{
<tr>
<th>@item.Name</th>
<th>@item.Amount</th>
<th>@GetUnit(item.UnitID).Result</th>
<th>@item.PriceNetto</th>
</tr>
}
async Task<string> GetUnit(Guid id)
{
string a = "https://localhost:5001/api/Units/";
a += id.ToString();
var temp = await Http.GetJsonAsync<Unit>(a); //it fails here
return temp.Name;
}
简而言之,我有一个产品列表,列表中的项目有 "UnitID" 属性,我用它来发出 GET 请求。当我在异步函数结果 Visual Studio 的调试器之后将代码 .Result
放在任何地方时,只需跳过负责调用 API 和 'bricks' 整个应用程序的行,没有任何错误或异常.那我得重启项目了。
我试图只为 returning GetUnit(id).Result
创建第二个函数,但它什么也没给出。我尝试 return 整个 Unit 对象,然后在 table GetUnit(item.UnitID).Name
中,但它只是代表对象(我猜...)。我似乎只需要用 .Result
来做,但是当我这样做时它不起作用。
我的 API 是用 .Net Core 2.2 制作的,我的客户端是用 .Net Core 3.0(Blazor 模板)制作的。这是一个错误还是我不能那样做?谢谢。
您不需要执行 it.i 建议在异步操作中调用它,如下所示:
razor 专注于视图,controller/model 专注于数据。
public async Task<IActionResult> SomeAction(Guid id)
{
var products = ..;
foreach (var item in products)
{
p.UnitID = await GetUnit(item.UnitID);
}
return View(products);
}
private async Task<string> GetUnit(Guid id)
{
string a = "https://localhost:5001/api/Units/";
a += id.ToString();
var temp = await Http.GetJsonAsync<Unit>(a); //it fails here
return temp.Name;
}
public class Product
{
public string Name { get; set; }
public decimal Amount { get; set; }
public string UnitID { get; set; }
public string PriceNetto { get; set; }
}
IMO,你不能那样做 way.In blazor,你可以在字符串列表中获取 OnInitializedAsync
instead.Store 中的所有数据 Name
并显示列表基于视图的数据 index.For 示例:
@code {
private List<string> listItems = new List<string>();
protected override async Task OnInitializedAsync()
{
//get products
foreach (var product in products)
{
string a = "https://localhost:5001/api/Units/";
a += product.UnitID.ToString();
var temp = await Http.GetJsonAsync<Unit>(a);
listItems.Add(temp.Name);
}
}
}
剃须刀
@{ int i = 0;}
@foreach(Product item in products)
{
<tr>
<th>@item.Name</th>
<th>@item.Amount</th>
<th> @listItems[i] </th>
<th>@item.PriceNetto</th>
</tr>
i++;
}
我正在为我的 REST API 创建网络客户端,我想向我的 table 添加一个包含异步函数结果的字段。
@foreach(Product item in products)
{
<tr>
<th>@item.Name</th>
<th>@item.Amount</th>
<th>@GetUnit(item.UnitID).Result</th>
<th>@item.PriceNetto</th>
</tr>
}
async Task<string> GetUnit(Guid id)
{
string a = "https://localhost:5001/api/Units/";
a += id.ToString();
var temp = await Http.GetJsonAsync<Unit>(a); //it fails here
return temp.Name;
}
简而言之,我有一个产品列表,列表中的项目有 "UnitID" 属性,我用它来发出 GET 请求。当我在异步函数结果 Visual Studio 的调试器之后将代码 .Result
放在任何地方时,只需跳过负责调用 API 和 'bricks' 整个应用程序的行,没有任何错误或异常.那我得重启项目了。
我试图只为 returning GetUnit(id).Result
创建第二个函数,但它什么也没给出。我尝试 return 整个 Unit 对象,然后在 table GetUnit(item.UnitID).Name
中,但它只是代表对象(我猜...)。我似乎只需要用 .Result
来做,但是当我这样做时它不起作用。
我的 API 是用 .Net Core 2.2 制作的,我的客户端是用 .Net Core 3.0(Blazor 模板)制作的。这是一个错误还是我不能那样做?谢谢。
您不需要执行 it.i 建议在异步操作中调用它,如下所示:
razor 专注于视图,controller/model 专注于数据。
public async Task<IActionResult> SomeAction(Guid id)
{
var products = ..;
foreach (var item in products)
{
p.UnitID = await GetUnit(item.UnitID);
}
return View(products);
}
private async Task<string> GetUnit(Guid id)
{
string a = "https://localhost:5001/api/Units/";
a += id.ToString();
var temp = await Http.GetJsonAsync<Unit>(a); //it fails here
return temp.Name;
}
public class Product
{
public string Name { get; set; }
public decimal Amount { get; set; }
public string UnitID { get; set; }
public string PriceNetto { get; set; }
}
IMO,你不能那样做 way.In blazor,你可以在字符串列表中获取 OnInitializedAsync
instead.Store 中的所有数据 Name
并显示列表基于视图的数据 index.For 示例:
@code {
private List<string> listItems = new List<string>();
protected override async Task OnInitializedAsync()
{
//get products
foreach (var product in products)
{
string a = "https://localhost:5001/api/Units/";
a += product.UnitID.ToString();
var temp = await Http.GetJsonAsync<Unit>(a);
listItems.Add(temp.Name);
}
}
}
剃须刀
@{ int i = 0;}
@foreach(Product item in products)
{
<tr>
<th>@item.Name</th>
<th>@item.Amount</th>
<th> @listItems[i] </th>
<th>@item.PriceNetto</th>
</tr>
i++;
}