RazorPageでドロップダウンリスト、セレクトボックスで選択した項目を取得するコードを紹介します。
プログラム例:シンプルな例
ASP.NET Core Webアプリケーションのプロジェクトを作成します。
コード
@page
@model SimpleSelectBox.Pages.SelectBoxGetValue01Model
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
}
<html>
<head>
</head>
<body>
<h2>セレクトボックスの値を取得するデモ</h2>
<form method="post">
<select asp-for="@Model.SelectValue">
<option>ぺんぎんクッキー</option>
<option>らくだキャラメル</option>
<option>かるがもサブレ</option>
<option>しろくまアイス</option>
<option>いるかキャンディー</option>
</select>
<input type="submit" value="Exec"/>
</form>
@if (Model.Output != null) {
<p>@Model.Output が選択されました。</p>
}
</body>
</html>
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace SimpleSelectBox.Pages
{
public class SelectBoxGetValue01Model : PageModel
{
[BindProperty]
public string SelectValue { get; set; }
public string Output { get; set; }
public void OnPost()
{
Output = SelectValue;
}
}
}
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
var app = builder.Build();
app.UseStaticFiles();
app.UseRouting();
app.MapRazorPages();
app.Run();
解説
フォームタグを記述し、内部にセレクトボックスとサブミットボタンを配置します。
select
タグには、
asp-for="@Model.SelectValue"
を記述し、セレクトボックスの選択内容が、モデルクラスのSelectValueプロパティに反映される設定とします。
セレクトボックスの項目は
option
タグで記述します。
<form method="post">
<select asp-for="@Model.SelectValue">
<option>ぺんぎんクッキー</option>
<option>らくだキャラメル</option>
<option>かるがもサブレ</option>
<option>しろくまアイス</option>
<option>いるかキャンディー</option>
</select>
<input type="submit" value="Exec"/>
</form>
asp-for
属性はタグヘルパーの機能のため、
@addTagHelper
を忘れずに記述します。
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
セレクトボックスの選択結果を代入する
SelectValue
プロパティをページモデルクラスに実装します。
BindProperty
属性を記述します。
[BindProperty]
public string SelectValue { get; set; }
サブミットボタンがクリックされると、フォームのPOST処理が実行されます。同じページにPOSTされるため、ページモデルクラスに実装した、
OnPost()
メソッドが呼び出されます。OnPostメソッド内で、Outputプロパティにセレクトボックスの選択された値を代入します。
public void OnPost()
{
Output = SelectValue;
}
Output変数に値が設定された場合、ページにメッセージを表示します。
@if (Model.Output != null) {
<p>@Model.Output が選択されました。</p>
}
実行結果
プロジェクトを実行します。Webブラウザが起動します。
(アプリケーションルート)/SelectBoxGetValue01
URLにアクセスします。
下図のページが表示されます。
ドロップダウンコントロールをクリックして、ドロップダウンリストを表示します。リストの項目をクリックして選択します。
選択できたら、[Exec]ボタンをクリックします。
クリックすると、ページ遷移し画面にセレクトボックスで選択した項目が表示されます。
プログラム例2:value 属性がある場合の動作
ASP.NET Core Webアプリケーションのプロジェクトを作成します。
コード
@page
@model SimpleSelectBox.Pages.SelectBoxGetValue02Model
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
}
<html>
<head>
</head>
<body>
<h2>セレクトボックスの値を取得するデモ</h2>
<form method="post">
<select asp-for="@Model.SelectValue">
<option value="1001">ぺんぎんクッキー</option>
<option value="1002">らくだキャラメル</option>
<option value="1003">かるがもサブレ</option>
<option value="1004">しろくまアイス</option>
<option value="1005">いるかキャンディー</option>
</select>
<input type="submit" value="Exec"/>
</form>
@if (Model.Output != null) {
<p>@Model.Output が選択されました。</p>
}
</body>
</html>
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace SimpleSelectBox.Pages
{
public class SelectBoxGetValue02Model : PageModel
{
[BindProperty]
public string SelectValue { get; set; }
public string Output { get; set; }
public void OnGet()
{
}
public void OnPost()
{
Output = SelectValue;
}
}
}
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
var app = builder.Build();
app.UseStaticFiles();
app.UseRouting();
app.MapRazorPages();
app.Run();
解説
先のプログラムと同様のコードです、違いは、セレクトボックスの
option
タグに
value
属性を追加しています。
<select asp-for="@Model.SelectValue">
<option value="1001">ぺんぎんクッキー</option>
<option value="1002">らくだキャラメル</option>
<option value="1003">かるがもサブレ</option>
<option value="1004">しろくまアイス</option>
<option value="1005">いるかキャンディー</option>
</select>
実行結果
プロジェクトを実行し、Webブラウザが起動します。
(アプリケーションルート)/SelectBoxGetValue02
URLにアクセスします。
ページが表示されますので、セレクトボックスのドロップダウンリストから項目を選択します。選択後[Exec]ボタンをクリックします。
ページ遷移し、下部にメッセージが表示されます。先ほどの例とは表示結果が異なり、
選択した項目のvalue属性に設定した値が
SelectValue
に代入されます。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2022-06-03
作成日: 2022-06-02