Below is a basic data driven checkbox example.
@page
@model IndexModel
@{
ViewData["Title"] = "Home page";
}
<div class="text-center">
<form method="post">
<table>
@foreach (var option in Model?.Options)
{
<tr>
<td>
<input type="checkbox" name="Selections" value="@option.Value" checked="@option.Selected" />
</td>
<td>
<label for="@option.Value">@option.Text</label>
</td>
</tr>
}
</table>
<br />
<input type="submit" value="Submit" />
</form>
</div>
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using RazorPagesSqlite.Data;
using RazorPagesSqlite.Models;
using System.Collections.Generic;
namespace RazorPagesSqlite.Pages
{
public class IndexModel : PageModel
{
private readonly ILogger<IndexModel> _logger;
private readonly ApplicationDbContext _context;
public IndexModel(ILogger<IndexModel> logger, ApplicationDbContext context)
{
_logger = logger;
_context = context;
}
public async Task OnGetAsync()
{
Options = await PopulateOptions();
}
public async Task OnPostAsync(List<string> Selections)
{
Options = await PopulateOptions();
foreach(var selection in Selections)
{
Options.FirstOrDefault(o => o.Value == selection).Selected = true;
}
}
public List<SelectListItem>? Options { get; set; } = default!;
private async Task<List<SelectListItem>> PopulateOptions()
{
List<CheckboxOption> results = await _context.CheckboxOptions.ToListAsync();
List<SelectListItem> items = new List<SelectListItem>();
foreach (CheckboxOption option in results)
{
items.Add(new SelectListItem() {
Value = option.Id.ToString(),
Text = option.Name
});
}
return items;
}
}
}
public class CheckboxOption
{
public int Id { get; set; }
public string? Name { get; set; }
}
The tutorials on this site also specifically illustrates how to handle dynamic checkboxes.
Razor Pages with Entity Framework Core in ASP.NET Core - Tutorial 1 of 8