C# サンプル集 |
Visual Basic 中学校 > C# サンプル集 > C# サンプル集目次 > ASP.NET Core > Razor Pages
チェックボックス
2024/3/26
この記事は ASP.NET Core Razor Pages を対象にしています。
この記事内のサンプルは、プロジェクトテンプレート「ASP.NET Core Web アプリ」を使用して、PagesフォルダーにRazorページを追加する前提です。
チェックボックス
CheckBox.cshtml.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.ComponentModel;
namespace WorkStandard.Pages.controls
{
public class CheckBoxModel : PageModel
{
[BindProperty]
[DisplayName("みかん")]
public bool IsMikan { get; set; }
[BindProperty]
[DisplayName("バナナ")]
public bool IsBanana { get; set; } = true;
public void OnPost()
{
if (!ModelState.IsValid)
{
return;
}
if (IsMikan)
{
System.Diagnostics.Debug.WriteLine("みかんが選択されています。");
}
if (IsBanana)
{
System.Diagnostics.Debug.WriteLine("バナナが選択されています。");
}
}
}
}
CheckBox.cshtml
@page
@model WorkStandard.Pages.controls.CheckBoxModel
<form method="post" >
<div class="mb-3 form-check">
<input asp-for="IsMikan" class="form-check-input" />
<label asp-for="IsMikan" class="form-check-label"></label>
</div>
<div class="mb-3 form-check">
<input asp-for="IsBanana" class="form-check-input" />
<label asp-for="IsBanana" class="form-check-label"></label>
</div>
<div>
<input type="submit" class="btn btn-primary" />
</div>
</form>
主なCSSクラスの効果
横並びのチェックボックス
CheckBoxInline.cshtml.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.ComponentModel;
namespace WorkStandard.Pages.controls
{
public class CheckBoxInlineModel : PageModel
{
[BindProperty]
[DisplayName("みかん")]
public bool IsMikan { get; set; }
[BindProperty]
[DisplayName("バナナ")]
public bool IsBanana { get; set; } = true;
public void OnPost()
{
if (!ModelState.IsValid)
{
return;
}
if (IsMikan)
{
System.Diagnostics.Debug.WriteLine("みかんが選択されています。");
}
if (IsBanana)
{
System.Diagnostics.Debug.WriteLine("バナナが選択されています。");
}
}
}
}
CheckBoxInline.cshtml
@page
@model WorkStandard.Pages.controls.CheckBoxInlineModel
<form method="post">
<div class="mb-3 form-check-inline">
<input asp-for="IsMikan" class="form-check-input" />
<label asp-for="IsMikan" class="form-check-label"></label>
</div>
<div class="mb-3 form-check-inline">
<input asp-for="IsBanana" class="form-check-input" />
<label asp-for="IsBanana" class="form-check-label"></label>
</div>
<div>
<input type="submit" class="btn btn-primary" />
</div>
</form>
主なCSSクラスの効果
- mb-3 下に少し余白(margin)を設けます。→ 余白
- form-check-inline form-check-input inputをBootstrapの横並びチェックボックスの外観にします。→ 横並びチェックボックス
- form-check-inline form-check-label labelをBootstrapのチェックボックスラベルの外観にします。→ チェックボックス
- btn btn-primary ボタンをBootstrapの外観にして、主要な機能であることを示します。→ ボタン
チェックしない場合エラーにする
CheckBoxRequired.cshtml.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace WorkStandard.Pages.controls
{
public class CheckBoxRequiredModel : PageModel
{
[BindProperty]
[DisplayName("利用規約に同意します。")]
[AllowedValues(true, ErrorMessage = "先に進むには利用規約に同意してください。")]
public bool IsKakuninOK { get; set; }
public void OnPost()
{
if (!ModelState.IsValid)
{
return;
}
System.Diagnostics.Debug.WriteLine($"チェックされています。{IsKakuninOK}");
}
}
}
CheckBoxRequired.cshtml
@page
@model WorkStandard.Pages.controls.CheckBoxRequiredModel
<form method="post">
<div class="mb-3">
<div class="form-check">
<input asp-for="IsKakuninOK" class="form-check-input" />
<label asp-for="IsKakuninOK" class="form-check-label"></label>
</div>
<div>
<span asp-validation-for="IsKakuninOK" class="text-danger"></span>
</div>
</div>
<div>
<input type="submit" class="btn btn-primary" />
</div>
</form>
主なCSSクラスの効果
動的に複数のチェックボックスを生成する(チェックボックスリスト)
CheckBoxList.cshtml.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.ComponentModel;
namespace WorkStandard.Pages.controls
{
public class CheckBoxListModel : PageModel
{
//このListの内容を画面上でチェックボックスにします。
public List<string> SourceItems { get; set; } = new List<string>();
//BindPropertyの効果で、チェックされた項目はここに格納されます。
[BindProperty]
public List<string> checkBoxItems { get; set; } = new List<string>();
private void LoadList()
{
SourceItems = new List<string>
{"北海道", "東北","関東","中部","関西","中国","四国","九州","沖縄" };
}
public void OnGet()
{
LoadList();
}
public void OnPost()
{
LoadList();
foreach(string checkedItem in checkBoxItems)
{
System.Diagnostics.Debug.WriteLine($"{checkedItem} は選択されました。");
}
}
}
}
CheckBoxList.cshtml
@page
@model WorkStandard.Pages.controls.CheckBoxListModel
<form method="post">
<div class="mb-3">
@for (var i = 0; i < Model.SourceItems.Count; i++)
{
string item = Model.SourceItems[i];
bool selected = Model.checkBoxItems.Contains(item);
<div class="form-check">
<input type="checkbox" name="checkBoxItems" id="check{@i}"
class="form-check-input" value="@item" checked="@selected" />
<label for="check{@i}" class="form-check-label">@item</label>
</div>
}
</div>
<div>
<input type="submit" class="btn btn-primary" />
</div>
</form>
メモ:div の class を form-check から form-check-inline に変更すると横並びになります。
主なCSSクラスの効果