Sorry but most of my searches take me to old MVC codes. Any help will be appreciated.
In MVC 6 with tag helpers, how do you code a set of checkboxes:
This is how the syntax should be in your for each asp-for should be wrapped in a string with quotation marks
@foreach (var option in Model.PhoneOptions)
{
<div>
@{ string cbId = "PhoneOption_" + @option.OptionId; }
<input asp-for="@option.IsOptionSelected" type="checkbox" value="@option.IsOptionSelected" id="@cbId" name="@cbId" />
@Html.Label(@cbId.ToString(), @option.OptionName)
@*This is causing invalid operation exception*@
@*<label asp-for="@cbId">@option.OptionName</label>*@
<span asp-validation-for="@cbId" class="text-danger" role="alert"></span>
</div>
}
This is finally what I did to make it to work. I am not sure if this is the best way to do it. I had to still use the html helpers because the tag helpers do not work.
Model:
public List<PhoneOption> PhoneOptions { get; set; }
. . .
PhoneOptions = repository.GetPhoneOptions().ToList();
View:
@if (@Model.PhoneOptions != null && @Model.PhoneOptions.Count() > 0)
{
for (int i = 0; i < @Model.PhoneOptions.Count(); i++)
{
<div>
<input asp-for="@Model.PhoneOptions[i].IsOptionSelected" type="checkbox" />
<label asp-for="@Model.PhoneOptions[i].IsOptionSelected">@Model.PhoneOptions[i].OptionName</label>
@*If these are not included, all OptionIds become 0 and all OptionName becomes null*@
@Html.HiddenFor(x => @Model.PhoneOptions[i].OptionId)
@Html.HiddenFor(y => @Model.PhoneOptions[i].OptionName)
</div>
}
}
I hope this helps someone else who is having the same checkbox list issues.
UPDATE: I've updated the html helpers to tag helpers above.