Недопустимое исключение приведения после обновления источника данных - PullRequest
0 голосов
/ 03 марта 2020

У меня проблема, когда я пытаюсь обновить источник данных из выпадающего списка. Вот мой компонент

<EjsDropDownList TValue="int?" Placeholder="SpareName" TItem="SpareNameViewModel" DataSource="@filterSpareNames" ShowClearButton=true>
            <DropDownListFieldSettings Value="Id" Text="Name"></DropDownListFieldSettings>
</EjsDropDownList>

@code {

     private List<SpareNameViewModel> filterSpareNames = new List<SpareNameViewModel>();

     protected override async Task OnInitializedAsync()
     {
            var spareNamesResult = await spareAttributeService.GetSpareNamesAsync();
            if (spareNamesResult.IsSuccess)
            {
                  filterSpareNames = spareNamesResult.Data.ToList();
            }
     }

     public class SpareNameViewModel
    {
        public int Id { get; set; }

        public string Name { get; set; }
    }
}

И ниже - исключение:

System.InvalidCastException: Unable to cast object of type 'System.Collections.Generic.List`1[System.Int32]' to type 'System.Collections.Generic.IEnumerable`1[System.Object]'.
   at Syncfusion.EJ2.Blazor.BaseComponent.updateProperty[T](String key, T publicValue, T privateValue, Object eventCallback, Expression`1 expression, Boolean isDataSource, Boolean isObservable)
   at Syncfusion.EJ2.Blazor.DropDowns.EjsDropDownList`2.propertyParametersSet()
   at Syncfusion.EJ2.Blazor.DropDowns.EjsDropDownList`2.OnParametersSetAsync()
   at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)
   at Microsoft.AspNetCore.Components.Rendering.HtmlRenderer.HandleException(Exception exception)
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.AddToPendingTasks(Task task)
   at Microsoft.AspNetCore.Components.Rendering.ComponentState.SetDirectParameters(ParameterView parameters)
   at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.UpdateRetainedChildComponent(DiffContext& diffContext, Int32 oldComponentIndex, Int32 newComponentIndex)
   at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForFramesWithSameSequence(DiffContext& diffContext, Int32 oldFrameIndex, Int32 newFrameIndex)
   at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForRange(DiffContext& diffContext, Int32 oldStartIndex, Int32 oldEndIndexExcl, Int32 newStartIndex, Int32 newEndIndexExcl)
   at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForFramesWithSameSequence(DiffContext& diffContext, Int32 oldFrameIndex, Int32 newFrameIndex)
   at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForRange(DiffContext& diffContext, Int32 oldStartIndex, Int32 oldEndIndexExcl, Int32 newStartIndex, Int32 newEndIndexExcl)
   at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForFramesWithSameSequence(DiffContext& diffContext, Int32 oldFrameIndex, Int32 newFrameIndex)
   at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForRange(DiffContext& diffContext, Int32 oldStartIndex, Int32 oldEndIndexExcl, Int32 newStartIndex, Int32 newEndIndexExcl)
   at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.ComputeDiff(Renderer renderer, RenderBatchBuilder batchBuilder, Int32 componentId, ArrayRange`1 oldTree, ArrayRange`1 newTree)
   at Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment)
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.RenderInExistingBatch(RenderQueueEntry renderQueueEntry)
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue()
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.AspNetCore.Components.Rendering.HtmlRenderer.HandleException(Exception exception)
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue()
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessPendingRender()
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.AddToRenderQueue(Int32 componentId, RenderFragment renderFragment)
   at Microsoft.AspNetCore.Components.ComponentBase.StateHasChanged()
   at SC.ClientApp.Blazor.Pages.Main.OnInitializedAsync() in D:\Repositories\SC\sc.clientapp.blazor\SC.ClientApp.Blazor\Pages\Main.razor:line 177
   at Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync()
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle)
   at Microsoft.AspNetCore.Components.Rendering.HtmlRenderer.HandleException(Exception exception)
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle)
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessAsynchronousWork()
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.RenderRootComponentAsync(Int32 componentId, ParameterView initialParameters)
   at Microsoft.AspNetCore.Components.Rendering.HtmlRenderer.CreateInitialRenderAsync(Type componentType, ParameterView initialParameters)
   at Microsoft.AspNetCore.Components.Rendering.HtmlRenderer.RenderComponentAsync(Type componentType, ParameterView initialParameters)
   at Microsoft.AspNetCore.Components.Rendering.RendererSynchronizationContext.<>c__11`1.<<InvokeAsync>b__11_0>d.MoveNext()

spareAttributeService.Data возвращает IEnumerable<SpareNameViewModel>

Также попытался использовать ObservableCollection вместо List, но это не работает И все работает, если filterSpareNames объявлено и инициализировано одновременно, как показано в документах.

Я что-то пропустил?

1 Ответ

0 голосов
/ 05 марта 2020

Исходя из вашей общей информации с примером кода и подробностями ошибки, мы подозреваем, что проблема возникла из-за определения одних и тех же классов в двух местах (модель и компонент SpareNameViewModel). Мы предлагаем удалить класс SpareNameViewModel со страницы рендеринга компонента и наследовать класс модели для решения проблемы.

Мы создали образец на основе ваших требований. Пожалуйста, найдите образец здесь: https://www.syncfusion.com/downloads/support/directtrac/general/ze/DropDownDataSource-365733169

Если проблема не устранена. Пожалуйста, верните нам данные ниже.

  1. Предоставьте доступ к данным о результатах обслуживания
  2. Если возможно, пожалуйста, воспроизведите проблему в приведенном выше примере и объясните подробные шаги по воспроизведению проблемы. Эти детали помогут нам найти точное решение в ближайшее время.
...