我想在blazor中使用单选组,所以在实现编辑表单并选择其中一个单选按钮后,我得到了这个错误:
Microsoft.AspNetCore.Components.Forms.InputRadioGroup`1[ENameCafe.SPA.Models.GameModel]不支持类型"EGameCafe.SAP.Models.GameModel".
这是我的编辑表格:
<EditForm Model="ViewModel" OnValidSubmit="HandleCreateGroup">
@if (ViewModel.Games.List.Any())
{
<InputRadioGroup Name="GameSelect" @bind-Value="Gamemodelsample">
@foreach (var game in ViewModel.Games.List)
{
<InputRadio Value="game" />
@game.GameName
<br />
}
</InputRadioGroup>
}
</EditForm>
@code{
public GameModel GameModelSample { get; set; } = new();
}
游戏模型为:
public class GameModel
{
public string GameId { get; set; }
public string GameName { get; set; }
}
InputRadioGroup与其他Blazor组件一样,只支持有限数量的类型,如String
或Int32
。你有正确的想法,但不幸的是,你遇到了Blazor的一种限制。
您可以尝试创建一个包装器字段。
private String _selectedGameId = "<Your Default Id>";
public String SelectedGameId
{
get => _selectedGameId;
set
{
_selectedGameId = value;
// Set the property of the ViewModel used in your Model Property of the EditContext or any other property/field
ViewModel.SelectedGame = ViewModel.Games.List?.FirstOrDefault(x => x.GameId == value);
}
}
使用属性SelectedGameId
作为InputRadioGroup组件的绑定值。
<InputRadioGroup Name="GameSelect" @bind-Value="SelectedGameId" >
@foreach (var game in ViewModel.Games.List)
{
<InputRadio Value="game.GameId" />
@game.GameName
<br />
}
</InputRadioGroup>
或者,您可以创建一个从InputRadioGroup
继承的自定义组件来创建一种GameBasedInputRadioGroup
。如果你感兴趣,我可以寄一个样品。
因为在代码@bind-Value="Gamemodelsample"
中,您试图将GameName
(字符串(绑定到Gamemodelsaple
(对象(,这将导致类型不匹配问题。
您只需要将代码修改为:
@bind-Value="GameModelSample.GameName"