記事詳細


投稿日
2026年09月05日19時51分
タイトル

ASP.NET Core MVC: Index Viewの、1行目の表示で、item.InOutが“入” item.ItemNameが"現在残高"、そしてitem.Amountが“0”場合に、SweetAlert2 を使った、Yes,Noモーダルダイアログで、“Editボタンをクリックして金額を入力して下さい”という表示をするjavascriptを教えてください。

内容

了解です。
先ほどのコードを、より堅牢かつ柔軟に改良したバージョンを提示します。
今回は Index ビュー内の全行をチェックし、最初に条件に一致した行で SweetAlert2 モーダルを表示 するように変更しました。
また、JavaScript 側での判定に切り替え、Razor からはデータを安全に埋め込む形にしています。

Index.cshtml(改良版)

Cshtml
@model IEnumerable<YourNamespace.Models.YourModel> @{ ViewData["Title"] = "Index"; } <!-- SweetAlert2 CDN --> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> <h2>Index</h2> <table class="table"> <thead> <tr> <th>InOut</th> <th>ItemName</th> <th>Amount</th> <th></th> </tr> </thead> <tbody> @foreach (var item in Model) { <tr data-inout="@item.InOut" data-itemname="@item.ItemName" data-amount="@item.Amount" data-id="@item.Id"> <td>@item.InOut</td> <td>@item.ItemName</td> <td>@item.Amount</td> <td> <a asp-action="Edit" asp-route-id="@item.Id" class="btn btn-primary">Edit</a> </td> </tr> } </tbody> </table> <script> document.addEventListener("DOMContentLoaded", function () { // 全行を取得 const rows = document.querySelectorAll("tbody tr"); for (let row of rows) { const inOut = row.dataset.inout; const itemName = row.dataset.itemname; const amount = parseFloat(row.dataset.amount); const id = row.dataset.id; // 条件判定 if (inOut === "入" && itemName === "現在残高" && amount === 0) { Swal.fire({ title: '金額未入力', text: 'Editボタンをクリックして金額を入力して下さい', icon: 'warning', showCancelButton: true, confirmButtonText: 'Yes', cancelButtonText: 'No' }).then((result) => { if (result.isConfirmed) { // Yes の場合、Edit ページへ遷移 window.location.href = '@Url.Action("Edit", "YourControllerName")' + '?id=' + encodeURIComponent(id); } // No の場合は何もしない }); break; // 最初に一致した行で終了 } } }); </script>

改良点

  1. 全行チェック
    • 最初の行だけでなく、全ての行を走査し、条件に一致した最初の行でモーダルを表示。
  2. データ属性 (data-*) 利用
    • Razor から JavaScript へ安全に値を渡すため、<tr> に data-inout などを埋め込み。
  3. JavaScript 側で条件判定
    • Razor 側の条件分岐を減らし、ビューの再利用性を向上。
  4. 安全な URL 遷移
    • encodeURIComponent を使用して ID を安全にクエリパラメータ化。

この方法なら、データの並び順が変わっても確実に条件一致時にモーダルが表示されます。

もし 複数該当行があっても全部順番にモーダル表示 したい場合は、break; を削除すれば対応可能です。

この改良版、実際に 複数該当行がある場合も順番にモーダルを出すバージョン も作りますか?
そうすればユーザーが全ての未入力行を確認できます。

Powered by Froala Editor

添付画像

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