【发布时间】:2021-03-07 04:06:29
【问题描述】:
使用 Blazor InputSelect,您可以遍历组件 ChildContent 中的列表项,但是
我想创建一个自定义 Blazor(WebAssembly 版本 5)InputSelect,它可以接受要在选择中呈现的任何对象的列表,代码可能如下所示:
<CustomInputSelect @bind-Value="@myEntity.CountryId" For="@(()=> myEntity.CountryId)" List="countries"
ValueField="@(a => a.Id)" DisplayField="@(a => a.CountryName)" ></CustomInputSelect>
甚至这个:
<CustomInputSelect @bind-Value="@myEntity.Country" For="@(()=> myEntity.Country)" List="countries"
ValueField="Id" DisplayField="CountryName" ></CustomInputSelect>
(注意:我使用了For属性来帮助编译器推断CountryId的类型并用于验证。这是组件的@typeparam。)
我尝试了很多方法,但都没有奏效,所以我在下面解释它们:
-
我尝试使用
dynamic类型作为列表,但 Blazor 似乎不支持动态类型,因为 razor 生成的代码中存在错误。 -
我尝试为组件使用多个
@typeparam,一个用于值,一个用于列表项。而且好像也不支持。@inherits 输入选择 //或者添加另一个类型参数@typeparam TListItem
和
<select>
@foreach (var item in List)
{
< option value="???">???</option >
}
</select>
@code{
[Parameter] public Expression<Func<TValue>>? For { get; set; }
[Parameter] public List<dynamic> List { get; set; }// or List<TListItem>
[Parameter] public Expression<Func<TListItem>>? ValueField { get; set; }
[Parameter] public Expression<Func<string>>? DisplayField { get; set; }
}
我的目标是将任何类型的列表发送到InputSelect,而@typeparam 用于绑定。
【问题讨论】:
标签: c# asp.net-core blazor blazor-webassembly