Blazor 页面组合框数据源到异步方法

Blazor Page Combobox DataSource to async method

我遇到一个问题,我需要将组合框的数据源设置为服务的异步方法。

<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 需要一个可枚举的集合,而您正在为其提供最终将提供该集合的任务。尝试将其更改为 DataSource="@(await LookUpService.GetProjectStatuses()",这可能会影响卡车。

第二个选项是在保存该集合的父组件上设置支持 属性,并以编程方式调用服务以填充列表,如在 OnInitialized 方法覆盖中.

此处支持同步融合。

我们已经检查了提供的代码示例和问题详细信息。我们怀疑报告的问题可能是由于您的应用程序中的数据源类型和 TItem 不匹配造成的。

此外,我们建议您将异步方法绑定在 OnInitialized 方法中,而不是直接分配给标签助手,以避免最终出现问题。

我们准备了示例供您参考,并附在下面。

示例 Link: 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; } 
}