【问题标题】:Telerik DropDown List not populating correctlyTelerik 下拉列表未正确填充
【发布时间】:2020-02-18 13:13:47
【问题描述】:

我的剃须刀代码包括这个 Telerik 下拉列表:

<TelerikDropDownList Data="@BkAccounts" TextField="@(nameof(BkAccounts.DisplayField))" ValueField="@(nameof(BkAccounts.BIC))" Value=1 ></TelerikDropDownList>

它指向这个类:

public class BkAccounts
{
    public int Id { get; set; }
    public string Iban { get; set; }
    public string BIC{ get; set; }
    public string DisplayField{ get { return this.Iban + " - " + this.BIC; } }
}

如果我这样写,下拉列表不会正确填充。

如果我这样改:

<TelerikDropDownList Data="@BkAccounts" TextField="@(nameof(BkAccounts.DisplayField))" ValueField="@(nameof(BkAccounts.Id))" Value=1 ></TelerikDropDownList>

效果很好。

实际上,我想从这个 BkAccounts 类中删除 Id 字段,但我无法让 DDL 正确填充。 我错过了什么? 根据 Telerik doc,TextField 可以接受一个字符串字段,所以它不应该是格式问题......

编辑: 2个sn-ps的区别就在这里: ValueField="@(nameof(BkAccounts.BIC) ---> 不填充 ValueField="@(nameof(BkAccounts.Id) ---> 像魅力一样填充

【问题讨论】:

  • 您是否尝试将 Value=1 更改为 Value="1" 因为 value 现在是一个字符串字段?

标签: c# telerik blazor


【解决方案1】:

我从 Telerik 论坛得到了答案: https://www.telerik.com/forums/telerikdropdownlist-throwing-a-system-invalidcastexception-when-valuefield-is-a-string#tnrnhB1ghkmWxEUE24wUhA

我需要添加到我的 TelerikDropDownList 代码中: @bind-Value=@SelectedBankAccount 并将其作为字符串属性声明到视图模型中

【讨论】:

    【解决方案2】:

    我开始强烈怀疑问题出在 Telerik 方面。 这是他们的示例 TelerikDropDownList 代码 https://demos.telerik.com/blazor-ui/dropdownlist/overview

    @page "/dropdownlist/overview"
    @page "/dropdownlist/index"
    
    @using TelerikBlazorDemos.Shared
    
    <div class="example-box-wrapper">
        <div class="example">
            <div class="mb-4">T-Shirt size:</div>
            <TelerikDropDownList Data="@Data"
                                 @bind-Value=@SelectedSizeMetric
                                 PopupHeight=""
                                 DefaultText="Select your T-shirt size"
                                 ValueField="SizeMetric" TextField="SizeText">
            </TelerikDropDownList>
        </div>
    
        <div class="ml-4">
            Selected Size Number: <strong>@SelectedSizeMetric</strong>
        </div>
    </div>
    
    @code  {
        public IEnumerable<Size> Data { get; set; }
        public bool AllowCustom { get; set; } = true;
        public int? SelectedSizeMetric { get; set; }
        public string SelectedSize { get; set; }
    
        public class Size
        {
            public string SizeText { get; set; }
            public int? SizeMetric { get; set; }
        }
    
        protected override void OnInitialized()
        {
            List<Size> sizes = new List<Size>();
    
            sizes.Add(new Size()
            {
                SizeText = "X-Small",
                SizeMetric = 3
            });
    
            sizes.Add(new Size()
            {
                SizeText = "Small",
                SizeMetric = 6
            });
    
            sizes.Add(new Size()
            {
                SizeText = "Medium",
                SizeMetric = 8
            });
    
            sizes.Add(new Size()
            {
                SizeText = "Large",
                SizeMetric = 10
            });
    
            sizes.Add(new Size()
            {
                SizeText = "X-Large",
                SizeMetric = 12
            });
    
            Data = sizes.AsQueryable();
            base.OnInitialized();
        }
    }
    

    它可以正常工作。 但如果我改变:

    ValueField="SizeMetric" //int type
    

    为:

    ValueField="SizeText"  //string type
    

    它不再有效... 我得到: System.InvalidCastException:'无法将'System.String'类型的对象转换为'System.Nullable`1[System.Int32]'。'

    【讨论】:

    • 我还需要更改:public int? SelectedSizeMetric { 得到;放; } 到公共字符串 SelectedSizeMetric { get;放; } 使其工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 2014-10-14
    • 1970-01-01
    相关资源
    最近更新 更多