【问题标题】:Blazor Page Combobox DataSource to async methodBlazor 页面组合框数据源到异步方法
【发布时间】:2021-09-30 03:33:38
【问题描述】:

我有一个问题,我需要将组合框的 DataSource 设置为服务的 Async 方法。

<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

【问题讨论】:

    标签: async-await syncfusion blazor-server-side


    【解决方案1】:

    此处支持同步融合。

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

    另外,我们建议您在 OnInitialized 方法中绑定 async 方法,而不是直接分配给 tag helper 以避免最终出现问题。

    我们已经准备了样本供您参考,并附在下面。

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

    【讨论】:

      【解决方案2】:

      看起来您的 DataSource 需要一个可枚举的集合,而您正在为它提供一个最终将提供该集合的任务。尝试将其更改为DataSource="@(await LookUpService.GetProjectStatuses()",这可能会导致卡车。

      第二个选项是在包含该集合的父组件上设置一个支持属性,并以编程方式进行服务调用以填充列表,就像在 OnInitialized 方法覆盖中一样。

      【讨论】:

      • OnInitializedAsync 是问题所在。我覆盖了非异步的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 2020-12-19
      • 1970-01-01
      相关资源
      最近更新 更多