In MVC 6, how to code checkbox list in view and pass the checked values to the controller?

后端 未结 2 1568
生来不讨喜
生来不讨喜 2020-12-09 21:12

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:

相关标签:
2条回答
  • 2020-12-09 21:37

    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>
            }
    
    0 讨论(0)
  • 2020-12-09 21:46

    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.

    0 讨论(0)
提交回复
热议问题