Blazor Page Combobox DataSource для asyn c метода - PullRequest
0 голосов
/ 21 апреля 2020

У меня проблема с тем, что мне нужно установить DataSource для поля со списком на метод Asyn c службы.

<div class="col-xs-5 col-sm-5 col-lg-5 col-md-5">
    <SfComboBox TValue="string" TItem="ProjectStatusViewModel" PopupHeight="230px" Placeholder="Project Status" FloatLabelType="@FloatLabelType.Auto"
                DataSource="@LookUpService.GetProjectStatuses()" @bind-Value="@_projectToEdit.Status">
        <ComboBoxFieldSettings Text="Name" Value="Name"></ComboBoxFieldSettings>
    </SfComboBox>
</div>

Я получаю эту ошибку:

cannot convert from 'System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<DesignTracker.Application.ViewModels.ProjectStatusViewModel>>' 

to 

'System.Collections.Generic.IEnumerable<DesignTracker.Application.ViewModels.ProjectStatusViewModel>'   DesignTracker.UI.SyncfusionBlazorApp

DataSource issue

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Привет от поддержки Syncfusion.

Мы проверили приведенный пример кода и выдали подробную информацию. Мы подозреваем, что описанная проблема может быть решена из-за несоответствия типа источника данных и TItem в вашем приложении.

Кроме того, мы предлагаем вам связать метод asyn c внутри метода OnInitialized вместо того, чтобы назначать его помощнику тега напрямую, чтобы избежать проблем с вашей стороны.

Мы подготовили образец для ознакомления и приложили его ниже.

Пример ссылки: https://www.syncfusion.com/downloads/support/directtrac/274346/ze/ComboBox_274346-1580423979

[index.razor]


<SfComboBox TValue="string" TItem="Countries" PopupHeight="230px" Placeholder="Project Status" FloatLabelType="Syncfusion.Blazor.Inputs.FloatLabelType.Auto" 
            DataSource="@DataSource" @bind-Value="@val"> 
    <ComboBoxFieldSettings Text="Name" Value="Code"></ComboBoxFieldSettings> 
</SfComboBox> 

@code { 

    private string val { get; set; } 

    public CountryService DataService; 
    public List<Countries> DataSource = new List<Countries>(); 

    protected override async Task OnInitializedAsync() 
    { 
        DataSource = await ownservice.GetDataAsync(); 
        this.val = await ownservice.GetPreSelectDataAsync(); 
    } 
} 

[OwnService.cs]


public class CountryService 
    { 

        public async Task<List<Countries>> GetDataAsync() 
        { 
            List<Countries> Country = new List<Countries> 
        { 
            new Countries() { Name = "Australia", Code = "AU" }, 
            new Countries() { Name = "Bermuda", Code = "BM" }, 
            new Countries() { Name = "Canada", Code = "CA" }, 
            new Countries() { Name = "Cameroon", Code = "CM" }, 
            new Countries() { Name = "Denmark", Code = "DK" }, 
            new Countries() { Name = "France", Code = "FR" }, 
            new Countries() { Name = "Finland", Code = "FI" } 
        }; 
            return await Task.FromResult(Country); 
        } 
        public async Task<string> GetPreSelectDataAsync() 
        { 
            string value = "AU"; 

            return await Task.FromResult(value); 
        } 
    } 

[Startup.cs]


public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddMvc(option => option.EnableEndpointRouting = false).SetCompatibilityVersion(CompatibilityVersion.Version_3_0); 
    services.AddRazorPages(); 
    services.AddServerSideBlazor(); 
    services.AddSyncfusionBlazor(); 
    services.AddSingleton<CountryService>(); 
} 
[WeatherForecast.cs] 

public class Countries 
{ 
    public string Name { get; set; } 

    public string Code { get; set; } 
} 

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

С уважением, Берли Б. C

1 голос
/ 29 апреля 2020

Похоже, ваш DataSource ожидает перечислимую коллекцию, тогда как вы предоставляете ему задачу, которая в итоге предоставит эту коллекцию. Попробуйте изменить его на DataSource="@(await LookUpService.GetProjectStatuses()", что может сделать грузовик.

Второй вариант заключается в том, чтобы установить свойство поддержки для родительского компонента, который содержит эту коллекцию, и выполнить вызов службы программным путем для заполнения списка, как в переопределении метода OnInitialized.

...