Razor Pagesのフォームの入力内容を検証するコードを紹介します。
概要
Razor Pagesでフォームの入力内容を検証するには
ModelState.IsValid
プロパティを利用する方法があります。
この記事では、
ModelState.IsValid
を利用したシンプルなフォームの検証コードを紹介します。
プログラム例
コード
@page
@model RazorPagesValidation.Pages.SimpleValidation01Model
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
}
<html>
<head></head>
<body>
<h2>入力内容の検証のデモ</h2>
<form method="post">
<input type="text" asp-for="inputText"/>
<input type="submit" value="Exec" />
</form>
<p>@Model.MessageText</p>
</body>
</html>
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.ModelBinding;
namespace RazorPagesValidation.Pages
{
public class SimpleValidation01Model : PageModel
{
[BindProperty]
public string inputText { get; set; }
public string MessageText { get; set; }
public void OnGet()
{
}
public PageResult OnPost()
{
if (ModelState.IsValid == true)
{
MessageText = "処理は成功しました。";
return Page();
}
else
{
foreach (ModelStateEntry se in ModelState.Values) {
foreach (ModelError me in se.Errors) {
MessageText += me.ErrorMessage;
}
}
return Page();
}
}
}
}
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
var app = builder.Build();
app.UseStaticFiles();
app.UseRouting();
app.MapRazorPages();
app.Run();
解説
Razor Pageでは、フォームタグ内にテキストボックスとPOSTするサブミットボタンを配置しています。
<form method="post">
<input type="text" asp-for="inputText"/>
<input type="submit" value="Exec" />
</form>
フォームの外側にメッセージを表示する枠を用意しページモデルクラスのMessageTextプロパティの内容を表示します。
<p>@Model.MessageText</p>
ページモデルクラスでは、テキストボックスの値を保持するinputText プロパティと、画面にメッセージを表示するMessageText プロパティを用意します。
inputText プロパティはフォームのテキストボックスからの入力を受け取るため、
BindProperty
属性を記述します。
[BindProperty]
public string inputText { get; set; }
public string MessageText { get; set; }
サブミットボタンを押した際に、POST処理が実行され、ページモデルクラスの下記のコード OnPost() メソッドが呼び出されます。
IsValidプロパティが
true
の場合はフォームの入力内容は正常で、処理を実行できます。今回の例では画面に「処理は成功しました」のメッセージを表示します。
IsValidプロパティが
false
の場合はフォームの入力内容の検証に失敗したことになります。この場合は、エラーメッセージをページに表示します。
エラーメッセージは複数の場合もあり、ModelState.Values 内の Errors オブジェクトのErrorMessage にエラーメッセージが設定されています。
メッセージは複数の場合もあるため、foreachループを利用して、すべてのエラーメッセージを画面に表示する動作を実装しています。
public PageResult OnPost()
{
if (ModelState.IsValid == true)
{
MessageText = "処理は成功しました。";
return Page();
}
else
{
foreach (ModelStateEntry se in ModelState.Values) {
foreach (ModelError me in se.Errors) {
MessageText += me.ErrorMessage;
}
}
return Page();
}
}
実行結果
プロジェクトを実行します。
Webブラウザが起動しますので
(アプリケーションルート)/https://localhost:7028/SimpleValidation01
のURLにアクセスします。下図のページが表示されます。
テキストボックスに文字列を入力し、[Exec]ボタンをクリックします。
POST処理が実行されます。「処理は成功しました」のメッセージが表示されます。
テキストボックスに数値を入力した場合も同様の動作になります。
テキストボックスに何も入力せずに[Exec]ボタンをクリックした場合には、IsValid がfalseとなり、「The inputText fiels is required.」のメッセージが表示されます。
テキストボックスに、タブ、スペースのみを入力した場合も同様に「The inputText fiels is required.」のメッセージが表示されます。
なお、絵文字を入力した場合でも文字列が入力されたと判定され、IsValidはtrueになります。
次の手順
検証処理のロジックを実装します。詳細は
こちらの記事を参照してください。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2023-03-14
作成日: 2022-06-15