Я хочу использовать радиогруппу в blazor, поэтому после реализации формы редактирования и выбора одного из переключателей я получил эту ошибку:
Microsoft.AspNetCore.Components.Forms.InputRadioGroup`1[EGameCafe.SPA.Models.GameModel] не поддерживает тип «EGameCafe.SPA.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();
}
и GameModel:
public class GameModel
{
public string GameId { get; set; }
public string GameName { get; set; }
}
Потому что в вашем коде @bind-Value = "Gamemodelsample"
вы пытаетесь связать GameName
(строку) с Gamemodelsaple
(объектом), что вызовет проблемы с несоответствием типов.
Вам нужно только изменить код, чтобы:
@bind-Value = "GameModelSample.GameName"
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
. Если интересно могу выложить образец.