Telerik 下拉列表未正确填充
Telerik DropDown List not populating correctly
我的剃须刀代码包含这个 telerik 下拉列表:
<TelerikDropDownList Data="@BkAccounts" TextField="@(nameof(BkAccounts.DisplayField))" ValueField="@(nameof(BkAccounts.BIC))" Value=1 ></TelerikDropDownList>
指向这个class:
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 class 中删除 Id 字段,但我无法正确填充 DDL。
我错过了什么?
根据 Telerik doc,TextField 可以接受字符串字段,所以应该不是格式问题...
编辑:
两个片段之间的区别在于:
ValueField="@(nameof(BkAccounts.BIC) ---> 不填充
ValueField="@(nameof(BkAccounts.Id) ---> 充满魅力
我开始强烈怀疑问题出在 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]'。'
我从 Telerik 论坛得到了答案:
https://www.telerik.com/forums/telerikdropdownlist-throwing-a-system-invalidcastexception-when-valuefield-is-a-string#tnrnhB1ghkmWxEUE24wUhA
我需要添加到我的 TelerikDropDownList 代码中:
@bind-Value=@SelectedBankAccount
并将其声明为字符串 属性 到视图模型
我的剃须刀代码包含这个 telerik 下拉列表:
<TelerikDropDownList Data="@BkAccounts" TextField="@(nameof(BkAccounts.DisplayField))" ValueField="@(nameof(BkAccounts.BIC))" Value=1 ></TelerikDropDownList>
指向这个class:
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 class 中删除 Id 字段,但我无法正确填充 DDL。 我错过了什么? 根据 Telerik doc,TextField 可以接受字符串字段,所以应该不是格式问题...
编辑: 两个片段之间的区别在于: ValueField="@(nameof(BkAccounts.BIC) ---> 不填充 ValueField="@(nameof(BkAccounts.Id) ---> 充满魅力
我开始强烈怀疑问题出在 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]'。'
我从 Telerik 论坛得到了答案: https://www.telerik.com/forums/telerikdropdownlist-throwing-a-system-invalidcastexception-when-valuefield-is-a-string#tnrnhB1ghkmWxEUE24wUhA
我需要添加到我的 TelerikDropDownList 代码中: @bind-Value=@SelectedBankAccount 并将其声明为字符串 属性 到视图模型