大家好,我在这里错过了一些相当基本的东西,我真的很感激你的指导。
我对Blazor和实体框架相当陌生,正在构建我的第一个Blazor应用程序之一
我有一个相当基本的数据类
using System.ComponentModel.DataAnnotations;
namespace BIDM2.Data
{
public class InvalidAddressMapping
{
[Key]
public int record_no { get; set; } = 0;
public string sales_org_pos { get; set; } = " ";
public string press_sales_mgr_code { get; set; } = " ";
public string press_sales_mgr_Name { get; set; } = " ";
public string forming_sales_rep_code { get; set; } = " ";
public string forming_sales_rep_Name { get; set; } = " ";
}
}
我在控制器中使用的,如下所示
[HttpGet]
public async Task <ActionResult<List<InvalidAddressMapping>>> GetInvalidAdressMappings()
{
return await _db.GetInvalidAddressMappings.FromSqlRaw("EXEC BIDM_GetInvalidAddressMappings;").ToListAsync();
}
,我想在我的剃刀页面使用它,像这样
@code {
List<InvalidAddressMapping> invalidMappings = new List<InvalidAddressMapping>();
protected override async Task OnInitializedAsync()
{
invalidMappings = await HttpClient.GetFromJsonAsync<List<InvalidAddressMapping>>(NavigationManager.BaseUri + "invalidmapping");
}
}
当我尝试运行我的razor页面时,我得到一个错误CS8601可能的null引用赋值:(
我不确定我完全理解,我可以使用一些指导,为我指出正确的方向,它必须是一些相当基本的东西,我错过了
有趣的是,这一切都发生了,因为我试图将现有的非异步方法转换为异步方法
使用
//1. get invalid address mappings
public InvalidAddressMapping[] GetInvalidAddressMappings()
{
InvalidAddressMapping[] invMappings;
// exec BIDM_GetInvalidAddressMappings calls the stored procedure
invMappings = _dbcontext.GetInvalidAddressMappings.FromSqlRaw("EXEC BIDM_GetInvalidAddressMappings;").ToArray();
return invMappings;
}
}
它工作得很漂亮,我可以看到一个可爱的JSON数据列表
请帮助一个苦苦挣扎的老家伙,给我一个方向,让我明白我错在哪里:)
谢谢大家
GetFromJsonAsync
扩展方法返回可空类型。在您的示例中,它是List<InvalidAddressMapping>?
(注意末尾额外的?
)。例如,如果它不能正确地反序列化,它可能返回null。代码告诉您需要检查null响应以确保安全。
所以安全的版本是这样做:
var result = await HttpClient.GetFromJsonAsync<List<InvalidAddressMapping>>(
NavigationManager.BaseUri + "invalidmapping");
if(result == null)
{
// Do something here to handle this error, for example:
throw new Exception("Can't get data from the server for some reason, help!");
}
invalidMappings = result;
还要注意,您看到的CS8601消息是一个警告,而不是一个错误。所以从技术上讲,你可以忽略它,尽管我强烈建议不要这样做。