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; }
}
我遇到一个问题,我需要将组合框的数据源设置为服务的异步方法。
<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; }
}