Telerik DropDown List не заполняется правильно - PullRequest
2 голосов
/ 18 февраля 2020

Мой код бритвы включает этот выпадающий список 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>

Это работает нормально.

На самом деле, я хочу удалить поле Id из этого класса BkAccounts, но я не иметь возможность правильно заполнять DDL. Что я пропустил? Согласно Telerik do c, TextField может принимать строковое поле, поэтому не должно быть проблем с форматированием ...

Редактировать: здесь разница между двумя фрагментами: ValueField = "@ (nameof (BkAccounts .BI C) ---> НЕ заполняет ValueField = "@ (nameof (BkAccounts.Id) ---> заполняется как символ

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Я получил ответ от форума Telerik: https://www.telerik.com/forums/telerikdropdownlist-throwing-a-system-invalidcastexception-when-valuefield-is-a-string#tnrnhB1ghkmWxEUE24wUhA

Мне нужно было добавить в свой код TelerikDropDownList: @ bind-Value=@SelectedBankAccount и объявить его как строковое свойство в theviewmodel

0 голосов
/ 24 февраля 2020

Я начинаю сильно подозревать, что проблема на стороне 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]'. '

...