記事詳細


投稿日
2026年08月22日16時56分
タイトル

ASP.NET Core MVC: Payments/Indexコントローラー側のコード:” int runningTotal = 0; foreach (var t in paymentBalance) { runningTotal += t.Amount; t.Balance = runningTotal; }”の”runningTotal"の値をユーザーの入力させる方法を教えてください。

内容

なるほど、
今のコードは runningTotal を 0 からスタートしてループで累積計算していますが、
「最初の値(初期値)をユーザーに入力させたい」ということですね。

ASP.NET Core MVC では、ユーザー入力を受け取るには以下の流れになります。

1. ViewModel に初期値プロパティを追加

まず、ビューからコントローラーに値を渡すための ViewModel を作ります。

Csharp
// Models/PaymentViewModel.cs using System.Collections.Generic; using System.ComponentModel.DataAnnotations; public class PaymentViewModel { [Display(Name = "初期残高")] public int InitialRunningTotal { get; set; } // ユーザーが入力する初期値 public List<Payment> Payments { get; set; } = new(); } // サンプル用 Payment モデル public class Payment { public int Amount { get; set; } public int Balance { get; set; } }

2. コントローラーで GET / POST を用意

ユーザーがフォームで初期値を入力 → POST で受け取って計算します。

Csharp
// Controllers/PaymentsController.cs using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; public class PaymentsController : Controller { [HttpGet] public IActionResult Index() { // 初期表示(初期値は0) var model = new PaymentViewModel { Payments = GetSamplePayments() }; return View(model); } [HttpPost] public IActionResult Index(PaymentViewModel model) { // 入力された初期値を使って計算 int runningTotal = model.InitialRunningTotal; foreach (var t in model.Payments) { runningTotal += t.Amount; t.Balance = runningTotal; } return View(model); } // ダミーデータ private List<Payment> GetSamplePayments() { return new List<Payment> { new Payment { Amount = 1000 }, new Payment { Amount = -200 }, new Payment { Amount = 500 } }; } }

3. ビューでフォームを作成

Views/Payments/Index.cshtml
Razor で初期値入力欄と送信ボタンを作ります。

Cshtml
@model PaymentViewModel <h2>Payments</h2> <form asp-action="Index" method="post"> <div> <label asp-for="InitialRunningTotal"></label> <input asp-for="InitialRunningTotal" /> </div> <table> <thead> <tr> <th>Amount</th> <th>Balance</th> </tr> </thead> <tbody> @for (int i = 0; i < Model.Payments.Count; i++) { <tr> <td> <input asp-for="@Model.Payments[i].Amount" /> </td> <td>@Model.Payments[i].Balance</td> </tr> } </tbody> </table> <button type="submit">計算</button> </form>

4. 動作イメージ

  1. ページを開くと初期残高入力欄と金額リストが表示される
  2. 初期残高を入力して「計算」ボタンを押す
  3. コントローラーの POST Index が呼ばれ、
    runningTotal の初期値としてユーザー入力が使われる
  4. 計算結果がビューに反映される

✅ ポイント

  • runningTotal の初期値をユーザー入力にするには、フォームから値を受け取る必要がある
  • そのために ViewModel を使って、初期値と支払いリストをまとめてやり取りする
  • GET と POST のアクションを分けることで、初期表示と計算後表示を切り替えられる

もし希望があれば、このコードを 「初期値を入力 → Ajax で即時反映」するバージョン にもできます。
そうすればページリロードなしで残高が更新されます。

この Ajax 版も作りますか?
そうすればユーザー体験がかなり良くなります。

Powered by Froala Editor

添付画像

画像はありません
Genreのカテゴリ-名
Views
編集 | 記事一覧