I just implemented something very similar:
Flag model
public class CheckboxModel { public int Value { get; set; } public string Text { get; set; } public bool Checked { get; set; } }
ViewModel
public class MyViewModel { public MyViewModel() {
View
@for (var i = 0; i < Model.Checkboxes.Count; i++) { <div class="checkbox-inline"> <input type="checkbox" asp-for="@Model.Checkboxes[i].Checked"/> <input type="hidden" asp-for="@Model.Checkboxes[i].Text" /> <input type="hidden" asp-for="@Model.Checkboxes[i].Value" /> <label asp-for="@Model.Checkboxes[i].Checked">@Model.Checkboxes[i].Text</label> </div> }
I would really like to know if there is a way to show some of this in MVC6, but I haven't found it yet.
Validation Custom Attribute
public class AtLeastOneRequiredAttribute : ValidationAttribute { protected override ValidationResult IsValid(object value, ValidationContext context) { var vm = (MyViewModel) context.ObjectInstance; if (vm.Checkboxes.Any(v => v.Checked)) { return ValidationResult.Success; } return new ValidationResult(ErrorMessage); } }
The action of the controller is simple:
public async Task<IActionResult> MyControllerAction(MyViewModel vm)
I know this is an old question, but hopefully this answer helps someone else.
source share