Флажки немного отличаются в блазоре. Обычно вы используете атрибут bind-value для элемента ввода, как показано ниже, однако это не рекомендуется, поскольку вы сможете только читать значение и НЕ обновлять пользовательский интерфейс, изменяя логическое значение с помощью кода:
<input type="checkbox" @bind-value="@item.Selected"/>
Вместо этого используйте синтаксис @bind для флажков, который намного более надежен и будет работать в обоих направлениях (изменение связанного логического значения из кода и взаимодействие с флажком в пользовательском интерфейсе). Смотрите синтаксис ниже:
<input type="checkbox" @bind="@item.Selected"/>
Атрибут bind автоматически свяжет ваше логическое значение со свойством «checked» элемента html.
Также убедитесь, что вы привязываете к свойству Selected, а не к значению Value.
Использование встроенной привязки избавит от необходимости вручную настраивать события, как вы делали в своем ответе. Вы также можете избавиться от блока if / else и объединить свой код в единый поток кода, поскольку теперь вы привязываетесь к логическому значению, а не устанавливаете свойство selected вручную. Если вам все еще нужно подключиться к событию, чтобы запустить какой-то процесс (возможно, скрыть части пользовательского интерфейса при установке флажка), я бы предложил использовать событие onclick и вручную передать элемент множественного выбора для каждой строки. Вот окончательный код:
@foreach(var item in list)
{
<input type="checkbox" @bind="item.Selected" @onclick="(()=>handleClick(item))" />
}
@foreach(var item in list.Where(x=>x.Selected))
{
<p> Item @item.Text is Selected</p>
}
@code {
MultiSelectList list = new MultiSelectList(new List<Car> { new Car { Year = 2019, Make = "Honda", Model = "Accord" }, new Car { Make = "Honda", Model = "Civic", Year = 2019 } });
private void handleClick(SelectListItem item)
{
//Do something crazy
}
}