C# サンプル集 |
Visual Basic 中学校 > C# サンプル集 > C# サンプル集目次 > ASP.NET Core > Razor Pages
入力値が範囲内であるかチェック
2024/4/14
この記事は ASP.NET Core Razor Pages を対象にしています。
この記事内のサンプルは、プロジェクトテンプレート「ASP.NET Core Web アプリ」を使用して、PagesフォルダーにこのRazorページを追加する前提です。
2以上 99以下 の範囲内にあるかチェックする
この例では境界値(2 と 99) は入力可能です。
RangeValidation.cshtml.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace WorkStandard.Pages.validation
{
public class RangeValidationModel : PageModel
{
[BindProperty]
[DisplayName("数量")]
[Range(2, 99, ErrorMessage = "{0}は {1} から {2} の範囲で入力してください。")]
public int? Count { get; set; }
public void OnPost()
{
if (!ModelState.IsValid)
{
return;
}
System.Diagnostics.Debug.WriteLine($"エラーなし。{Count}");
}
}
}
RangeValidation.cshtml
@page
@model WorkStandard.Pages.validation.RangeValidationModel
<form method="post">
<div class="mb-3">
<label asp-for="Count"></label>
<input asp-for="Count" class="form-control" />
<span asp-validation-for="Count" class="text-danger"></span>
</div>
<div>
<input type="submit" class="btn btn-primary" />
</div>
</form>
主なCSSクラスの効果
2以上 60未満 の範囲内にあるかチェックする
この例は .NET 8(2023年)以上で動作します。
この例では 2 や 59.9 は OK で、60 はエラーになります。
RangeExclusiveValidation.cshtml.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace WorkStandard.Pages.validation
{
public class RangeExclusiveValidationModel : PageModel
{
[BindProperty]
[DisplayName("重量")]
[Range(2D, 60D, MaximumIsExclusive = true, ErrorMessage = "{0}は {1} 以上 {2} 未満を入力してください。")]
public double? Weight { get; set; }
public void OnPost()
{
if (!ModelState.IsValid)
{
return;
}
System.Diagnostics.Debug.WriteLine($"エラーなし。{Weight}");
}
}
}
メモ:下限の方を排他的する(つまり、2はNGで、2.1はOKにする)にはMinimumIsExclusive = true を指定します。
RangeExclusiveValidation.cshtml
@page
@model WorkStandard.Pages.validation.RangeExclusiveValidationModel
<form method="post">
<div class="mb-3">
<label asp-for="Weight"></label>
<input asp-for="Weight" class="form-control" />
<span asp-validation-for="Weight" class="text-danger"></span>
</div>
<div>
<input type="submit" class="btn btn-primary" />
</div>
</form>
主なCSSクラスの効果
日付が 1900/1/1 から 2099/12/31 の範囲内にあるかチェックする
RangeDateValidation.cshtml.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace WorkStandard.Pages.validation
{
public class RangeDateValidationModel : PageModel
{
[BindProperty]
[DisplayName("生年月日")]
[DataType(DataType.Date)]
[Range(typeof(DateTime), "1900/1/1", "2099/12/31", ErrorMessage = "{0} は {1:yyyy/M/d} から {2:yyyy/M/d} の範囲で入力してください。")]
public DateTime? BirthDate { get; set; } = DateTime.Now;
public void OnPost()
{
if (!ModelState.IsValid)
{
return;
}
System.Diagnostics.Debug.WriteLine($"エラーなし。{BirthDate}");
}
}
}
RangeDateValidation.cshtml
@page
@model WorkStandard.Pages.validation.RangeDateValidationModel
<form method="post">
<div class="mb-3">
<label asp-for="BirthDate"></label>
<input asp-for="BirthDate" class="form-control" />
<span asp-validation-for="BirthDate" class="text-danger"></span>
</div>
<div>
<input type="submit" class="btn btn-primary" />
</div>
</form>
主なCSSクラスの効果