值不能为空。参数名称:尝试使用Web api获取数据时的来源

Luc*_*res 4 c# asp.net-core asp.net-core-webapi blazor blazorise

我有这个问题,我整晚都在试图解决这个问题,我正在为此绞尽脑汁,抱歉,如果这很愚蠢,我是一个相对较新的程序员..

\n\n

它应该通过 Web API 从我的数据库获取一些数据,并将其显示在数据网格中(使用 blazorise 的数据网格),但它不起作用。

\n\n

代码:

\n\n
@using Newtonsoft.Json; \n@page "/email/inbox"\n<Row>\n    <Column>\n        <Card Margin="Margin.Is4.OnY">\n            <CardHeader>\n                <CardTitle>Data Grid</CardTitle>\n            </CardHeader>\n            <CardBody>\n                <CardText>Combine diferent datagrid options</CardText>\n            </CardBody>\n            <CardBody>\n                <DataGrid TItem="Fornecedor"\n                          Data="@dataModels"\n                          EditMode="DataGridEditMode.Popup"\n                          Editable="true"\n                          Sortable="true"\n                          Filterable="true"\n                          ShowPager="true"\n                          RowInserted="@OnRowInserted"\n                          RowUpdated="@OnRowUpdated"\n                          RowRemoved="@OnRowRemoved"\n                          UseInternalEditing="true"\n                          @bind-SelectedRow="@fornecedorSelecionado"\n                          Striped="true"\n                          Bordered="true"\n                          Hoverable="true"\n                          CustomFilter="@OnCustomFilter">\n                    <DataGridAggregates>\n                        <DataGridAggregate TItem="Fornecedor" Field="@nameof( Fornecedor.Email )" Aggregate="DataGridAggregateType.Count">\n                            <DisplayTemplate>\n                                @($"Total emails: {context.Value}")\n                            </DisplayTemplate>\n                        </DataGridAggregate>\n                        <DataGridAggregate TItem="Fornecedor" Field="@nameof( Fornecedor.Validado )" Aggregate="DataGridAggregateType.TrueCount" />\n                    </DataGridAggregates>\n                    <DataGridColumns>\n                        <DataGridCommandColumn TItem="Fornecedor" Width="170px">\n                            <NewCommandTemplate>\n                                <Button Color="Color.Success" Clicked="@context.Clicked">New</Button>\n                            </NewCommandTemplate>\n                            <EditCommandTemplate>\n                                <Button Color="Color.Primary" Clicked="@context.Clicked">Edit</Button>\n                            </EditCommandTemplate>\n                            <SaveCommandTemplate>\n                                <Button Color="Color.Primary" Clicked="@context.Clicked">Save</Button>\n                            </SaveCommandTemplate>\n                            <DeleteCommandTemplate>\n                                <Button Color="Color.Danger" Clicked="@context.Clicked">Delete</Button>\n                            </DeleteCommandTemplate>\n                            <CancelCommandTemplate>\n                                <Button Color="Color.Secondary" Clicked="@context.Clicked">Cancel</Button>\n                            </CancelCommandTemplate>\n                            <ClearFilterCommandTemplate>\n                                <Button Color="Color.Warning" Clicked="@context.Clicked">Clear Filter</Button>\n                            </ClearFilterCommandTemplate>\n                        </DataGridCommandColumn>\n                        <DataGridColumn TItem="Fornecedor" Field="@nameof( Fornecedor.Id )" Caption="#" Sortable="false" Width="60px" />\n                        <DataGridColumn TItem="Fornecedor" Field="@nameof( Fornecedor.NomeEmpresa )" Caption="Fornecedor" Editable="true">\n                            <FilterTemplate>\n                                <TextEdit Placeholder="Search name" TextChanged="@(v=>context.TriggerFilterChange(v))" />\n                            </FilterTemplate>\n                        </DataGridColumn>\n                        <DataGridColumn TItem="Fornecedor" Field="@nameof( Fornecedor.NomeContato )" Caption="Contato" Editable="true" />\n                        <DataGridDateColumn TItem="Fornecedor" Field="@nameof( Fornecedor.Telefone )" DisplayFormat="{(00)00000-0000}" Caption="Telefone" Editable="true" />\n                        <DataGridColumn TItem="Fornecedor" Field="@nameof( Fornecedor.Email )" Caption="Email" Editable="true" />\n                        <DataGridColumn TItem="Fornecedor" Field="@nameof( Fornecedor.CEP )" Caption="CEP" Editable="true" />\n                        <DataGridColumn TItem="Fornecedor" Field="@nameof( Fornecedor.Cidade )" Caption="Cidade" Editable="true">\n                            <FilterTemplate>\n                                <Select TValue="string" SelectedValueChanged="@(e => context.TriggerFilterChange(e == "*" ? "" : e.ToString()))">\n                                    <SelectItem Value="@("*")">All</SelectItem>\n                                    @foreach (var item in dataModels)\n                                    {\n                                        <SelectItem Value="@item.Cidade">@item.Cidade</SelectItem>\n                                    }\n                                </Select>\n                            </FilterTemplate>\n                        </DataGridColumn>\n                        <DataGridColumn TItem="Fornecedor" Field="@nameof( Fornecedor.Endereco )" Caption="Endere\xc3\xa7o" Editable="true" Filterable="false" />\n                        <DataGridColumn TItem="Fornecedor" Field="@nameof( Fornecedor.Servico )" Caption="Servi\xc3\xa7o" Editable="true" />\n                        <DataGridColumn TItem="Fornecedor" Field="@nameof( Fornecedor.Especialidade )" Caption="Especialidades" Editable="true" />\n                        <DataGridCheckColumn TItem="Fornecedor" Field="@nameof(Fornecedor.Validado)" Caption="Validado" Editable="true" Filterable="false">\n                            <DisplayTemplate>\n                                <Check TValue="bool?" Checked="context.Validado" Disabled="true" ReadOnly="true" />\n                            </DisplayTemplate>\n                        </DataGridCheckColumn>\n                    </DataGridColumns>\n                </DataGrid>\n            </CardBody>\n        </Card>\n    </Column>\n</Row>\n<Row>\n    <Column>\n        <Card>\n            <CardHeader>\n                <CardTitle>Fornecedor Selecionado</CardTitle>\n            </CardHeader>\n            <CardBody>\n                <Fields>\n                    <Field>\n                        <FieldLabel>Fornecedor</FieldLabel>\n                        <FieldBody>\n                            <TextEdit ReadOnly="true" Text="@fornecedorSelecionado?.NomeEmpresa"></TextEdit>\n                        </FieldBody>\n                    </Field>\n                    <Field>\n                        <FieldLabel>Contato</FieldLabel>\n                        <TextEdit ReadOnly="true" Text="@fornecedorSelecionado?.NomeContato"></TextEdit>\n                    </Field>\n                </Fields>\n                <Fields>\n                    <Field>\n                        <FieldLabel>Telefone</FieldLabel>\n                        <FieldBody>\n                            <NumericEdit TValue="int" ReadOnly="true" Text="@fornecedorSelecionado?.Telefone"></NumericEdit>\n                        </FieldBody>\n                    </Field>\n                    <Field>\n                        <FieldLabel>Email</FieldLabel>\n                        <TextEdit ReadOnly="true" Text="@fornecedorSelecionado?.Email"></TextEdit>\n                    </Field>\n                </Fields>\n            </CardBody>\n        </Card>\n    </Column>\n</Row>\n@code{\n    public class DataService\n    {\n        HttpClient client = new HttpClient();\n\n        public async Task<List<Fornecedor>> GetUsuariosAsync()\n        {\n            try\n            {\n                string url = "https://myAPI.azurewebsites.net/Api/Fornecedores";\n                var response = await client.GetStringAsync(url);\n                var fornecedores = JsonConvert.DeserializeObject<List<Fornecedor>>(response);\n                return fornecedores;\n            }\n            catch (Exception ex)\n            {\n                throw ex;\n            }\n        }\n    }\n\n    DataGridEditMode editMode = DataGridEditMode.Popup;\n\n    bool editable = true;\n    bool sortable = true;\n    bool filterable = true;\n    bool showPager = true;\n\n    Fornecedor fornecedorSelecionado;\n\n    public class Fornecedor\n    {\n        public int Id { get; set; }\n        public string NomeEmpresa { get; set; }\n        public string NomeContato { get; set; }\n        public int Telefone { get; set; }\n        public string Email { get; set; }\n        public int CEP { get; set; }\n        public string Cidade { get; set; }\n        public string Endereco { get; set; }\n        public string Servico { get; set; }\n        public string Especialidade { get; set; }\n        public string Especialidade_dois { get; set; }\n        public string Especialidade_tres { get; set; }\n        public string Website { get; set; }\n        public bool? Validado { get; set; }\n    }\n\n    DataService dataService;\n\n    protected async Task FornecedoresAPI()\n    {\n        try\n        {\n            await dataService.GetUsuariosAsync();\n        }\n        catch (Exception ex)\n        {\n            throw ex;\n        }\n    }\n\n    List<Fornecedor> dataModels;\n    // generated with https://mockaroo.com/\n    protected override async Task OnInitializedAsync()\n    {\n        dataService = new DataService();\n        dataModels = await dataService.GetUsuariosAsync();\n\n    }\n\n    string customFilterValue;\n\n    bool OnCustomFilter(Fornecedor model)\n    {\n        if (string.IsNullOrEmpty(customFilterValue))\n            return true;\n\n        return\n            model.NomeEmpresa?.Contains(customFilterValue, StringComparison.OrdinalIgnoreCase) == true\n            || model.NomeContato?.Contains(customFilterValue, StringComparison.OrdinalIgnoreCase) == true\n            || model.Email?.Contains(customFilterValue, StringComparison.OrdinalIgnoreCase) == true;\n    }\n} \n
Run Code Online (Sandbox Code Playgroud)\n\n

我收到此错误:

\n\n
\n

ArgumentNullException:值不能为空。(参数\'来源\')

\n\n

System.Linq.ThrowHelper.ThrowArgumentNullException(ExceptionArgument 参数)\n System.Linq.Enumerable.Count(IEnumerable 源,Func 谓词)
\n Blazorise.DataGrid._DataGridAggregateRow.CountOf(DataGridColumn 列)
\n Blazorise.DataGrid._DataGridAggregateRow.Calculate( DataGrid聚合列)
\n Blazorise.DataGrid._DataGridAggregateRow+<>c__DisplayClass32_0.b__1(RenderTreeBuilder __builder3)\n Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder.AddContent(int 序列,RenderFragment 片段)\n Blazorise.TableRowCell.BuildRenderTree(RenderTreeBuilder __builder)\n Microsoft .AspNetCore.Components.ComponentBase.<.ctor>b__6_0(RenderTreeBuilder 构建器)\n Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment)\n Microsoft.AspNetCore.Components.RenderTree.Renderer.RenderInExistingBatch( RenderQueueEntry renderQueueEntry)\n Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue()\n Microsoft.AspNetCore.Components.Rendering.HtmlRenderer.HandleException(Exception 异常)\n Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue() \n Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessPendingRender()\n Microsoft.AspNetCore.Components.RenderTree.Renderer.AddToRenderQueue(int componentId, RenderFragment renderFragment)\n Microsoft.AspNetCore.Components.RenderHandle.Render(RenderFragment renderFragment) \n Microsoft.AspNetCore.Components.ComponentBase.StateHasChanged()\n Microsoft.AspNetCore.Components.ComponentBase.CallOnParametersSetAsync()\n Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync()\n Microsoft.AspNetCore.Components.Rendering.HtmlRenderer .HandleException(Exception 异常)\n Microsoft.AspNetCore.Components.RenderTree.Renderer.AddToPendingTasks(任务任务)\n Microsoft.AspNetCore.Components.Rendering.ComponentState.SetDirectParameters(ParameterView 参数)\n Microsoft.AspNetCore.Components.RenderTree. Renderer.RenderRootComponentAsync(int componentId, ParameterView initialParameters)\n Microsoft.AspNetCore.Components.Rendering.HtmlRenderer.CreateInitialRenderAsync(Type componentType, ParameterView initialParameters)\n Microsoft.AspNetCore.Components.Rendering.HtmlRenderer.RenderComponentAsync(Type componentType, ParameterView initialParameters) \n Microsoft.AspNetCore.Components.Rendering.RendererSynchronizationContext+<>c__11+<b__11_0>d.MoveNext()\n Microsoft.AspNetCore.Mvc.ViewFeatures.StaticComponentRenderer.PrerenderComponentAsync(ParameterView 参数、HttpContext httpContext、类型 componentType)\n Microsoft.AspNetCore .Mvc.ViewFeatures.ComponentRenderer.PrerenderedServerComponentAsync(HttpContext context, ServerComponentInitationSequence invokingId, Type type, ParameterViewparameterCollection)\n Microsoft.AspNetCore.Mvc.ViewFeatures.ComponentRenderer.RenderComponentAsync(ViewContext viewContext, Type componentType, RenderMode renderMode, 对象参数)\n Microsoft .AspNetCore.Mvc.TagHelpers.ComponentTagHelper.ProcessAsync(TagHelperContext上下文,TagHelperOutput输出)\n Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperRunner.g__Awaited|0_0(任务任务,TagHelperExecutionContextexecutionContext,int i,int count)\n _Host.cshtml 中的 Revvi.Pages.Pages__Host.b__14_1()\n +\n \n Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperExecutionContext.SetOutputContentAsync()\n Revvi.Pages.Pages__Host.ExecuteAsync( ) 在 _Host.cshtml\n +\n 布局 = null;\n Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageCoreAsync(IRazorPage 页面,ViewContext 上下文)\n Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageAsync(IRazorPage 页面) , ViewContext context, bool invokeViewStarts)\n Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync(ViewContext context)\n Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ViewContext viewContext, string contentType, Nullable statusCode)\n Microsoft .AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ViewContext viewContext, string contentType, Nullable statusCode)\n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.g__Awaited|29_0(ResourceInvoker 调用程序、任务lastTask、状态下一个、作用域范围、对象状态, bool isCompleted)\n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.Rethrow(ResultExecutedContextSealed 上下文)\n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.ResultNext(ref 状态下一个, ref 范围范围, ref 对象状态, ref bool isCompleted )\n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.InvokeResultFilters()\n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.g__Awaited|24_0(ResourceInvoker 调用程序、任务lastTask、状态下一个、作用域范围、对象状态、bool isCompleted) \n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.Rethrow(ResourceExecutedContextSealed 上下文)\n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.Next(ref 状态下一个、ref 范围范围、ref 对象状态、ref bool 已完成)\n Microsoft .AspNetCore.Mvc.Infrastruct.ResourceInvoker.InvokeFilterPipelineAsync()\n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.g__Awaited|17_0(ResourceInvoker 调用程序、任务任务、IDisposable 范围)\n Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0 (终结点端点、任务 requestTask、ILogger 记录器)\n Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext 上下文)可为空的 statusCode)\n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.g__Awaited|29_0(ResourceInvoker 调用程序、任务 lastTask、状态下一个、范围范围、对象状态、bool isCompleted)\n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.Rethrow (ResultExecutedContextSealed 上下文)\n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.ResultNext(ref 状态下一个、ref 范围范围、ref 对象状态、ref bool isCompleted)\n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.InvokeResultFilters()\ n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.g__Awaited|24_0(ResourceInvoker 调用程序、任务lastTask、状态下一个、范围范围、对象状态、bool isCompleted)\n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.Rethrow(ResourceExecutedContextSealed 上下文) \n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.Next(ref 状态下一个、ref 范围范围、ref 对象状态、ref bool isCompleted)\n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.InvokeFilterPipelineAsync()\n Microsoft.AspNetCore .Mvc.Infrastruct.ResourceInvoker.g__Awaited|17_0(ResourceInvoker 调用程序、任务任务、IDisposable 范围)\n Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(终结点终结点、任务 requestTask、ILogger 记录器)\n Microsoft.AspNetCore.Diagnostics .DeveloperExceptionPageMiddleware.Invoke(HttpContext上下文)可为空的 statusCode)\n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.g__Awaited|29_0(ResourceInvoker 调用程序、任务 lastTask、状态下一个、范围范围、对象状态、bool isCompleted)\n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.Rethrow (ResultExecutedContextSealed 上下文)\n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.ResultNext(ref 状态下一个、ref 范围范围、ref 对象状态、ref bool isCompleted)\n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.InvokeResultFilters()\ n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.g__Awaited|24_0(ResourceInvoker 调用程序、任务lastTask、状态下一个、范围范围、对象状态、bool isCompleted)\n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.Rethrow(ResourceExecutedContextSealed 上下文) \n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.Next(ref 状态下一个、ref 范围范围、ref 对象状态、ref bool isCompleted)\n Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.InvokeFilterPipelineAsync()\n Microsoft.AspNetCore .Mvc.Infrastruct.ResourceInvoker.g__Awaited|17_0(ResourceInvoker 调用程序、任务任务、IDisposable 范围)\n Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(终结点终结点、任务 requestTask、ILogger 记录器)\n Microsoft.AspNetCore.Diagnostics .DeveloperExceptionPageMiddleware.Invoke(HttpContext上下文)

\n
\n\n

我完全不知道该怎么办..

\n

Hen*_*man 5

List<Fornecedor> dataModels;最初是null.

要么将其初始化为空列表,

List<Fornecedor> dataModels = new List<Fornecedor> ();
Run Code Online (Sandbox Code Playgroud)

或者将大部分 razor 代码包含在@if (dataModels != null) { ... }
FetchData 模板页面中以获取示例。

Blazorise.DataGrid 可能确实知道如何处理null集合,我希望它知道。但是“Cidade”列的过滤器中也有 foreach() 循环,看起来会引发异常。