You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 13:01:03