Syncfusion Blazor SfDropDownList搭配UrlAdapter始终为空的问题求助
SfDropDownList搭配UrlAdapter无法加载自定义接口数据的解决方法
问题场景
在Blazor项目中使用Syncfusion的SfDropDownList组件,通过UrlAdapter对接自定义非Web API接口,浏览器已成功调用目标URL并返回符合规范的Payload,但下拉列表始终显示“无结果”。
接口返回Payload示例
{ "result":[ {"value":"sample 1","text":"sample 1"}, {"value":"sample 2","text":"sample 2"} ], "count":19 }
当前使用的Blazor代码
<SfDropDownList TValue="string" TItem="ListItemStringOnly" PopupHeight="230px" Placeholder="Select a type" @bind-Value="EquipmentType"> <SfDataManager Url="@Url" Adaptor="Adaptors.UrlAdaptor" CrossDomain=true Offline="true"></SfDataManager> <DropDownListFieldSettings Text="Text" Value="Value" /> <!-- tried lower case text and value as well --> </SfDropDownList> @code { string EquipmentType { get; set; } string Url; protected override async Task OnInitializedAsync() { Url = new EquipmentTypeLookup().ToReplyUrl(); } }
当前使用的实体类代码
public class ListItemStringOnly { public string Value { get; set; } public string Text { get; set; } public ListItemStringOnly(string val) { Value = val; Text = val; } }
当前下拉列表状态

UrlAdapter官方文档说明(翻译)
UrlAdapter用于对接遵循RESTful规范的后端服务,默认要求响应包含
result(数据数组)和count(总数据条数)两个字段,以此完成数据加载与分页逻辑。
解决步骤
1. 修正实体类与返回字段的大小写映射
接口返回的字段为小写value/text,但实体类属性为大写开头的Value/Text,C# JSON序列化默认区分大小写,导致数据无法正确映射。可通过两种方式处理:
方式一:添加JSON特性指定字段映射
using System.Text.Json.Serialization; public class ListItemStringOnly { [JsonPropertyName("value")] public string Value { get; set; } [JsonPropertyName("text")] public string Text { get; set; } public ListItemStringOnly(string val) { Value = val; Text = val; } }
同时保持DropDownListFieldSettings配置与实体类属性一致:
<DropDownListFieldSettings Text="Text" Value="Value" />
方式二:直接修改实体类属性名为小写
public class ListItemStringOnly { public string value { get; set; } public string text { get; set; } public ListItemStringOnly(string val) { value = val; text = val; } }
同步修改字段配置:
<DropDownListFieldSettings Text="text" Value="value" />
2. 关闭Offline模式(按需)
当前配置了Offline="true",组件会优先读取本地缓存数据。若首次调用接口无缓存数据,可能导致显示“无结果”。可移除该属性:
<SfDataManager Url="@Url" Adaptor="Adaptors.UrlAdaptor" CrossDomain=true></SfDataManager>
3. 自定义Adaptor确保数据解析(可选)
若默认UrlAdapter仍无法正确解析响应,可自定义Adaptor继承UrlAdaptor,手动确认数据结构:
using Syncfusion.Blazor.Data; public class CustomUrlAdaptor : UrlAdaptor { public override object Read(DataManagerRequest dm, string key) { var response = base.Read(dm, key); // 可在此处调试查看响应解析结果 return response; } public override Task<object> ReadAsync(DataManagerRequest dm, string key) { return base.ReadAsync(dm, key); } }
在SfDataManager中使用自定义Adaptor:
<SfDataManager Url="@Url" AdaptorInstance="@typeof(CustomUrlAdaptor)" CrossDomain=true></SfDataManager>
4. 确认接口请求参数处理
UrlAdapter默认会发送GET请求并携带分页、过滤等参数,需确保自定义接口能正确处理这些参数,或返回完整的result数组。
内容的提问来源于stack exchange,提问作者lucuma
相关产品推荐
相关产品推荐

