記事詳細


投稿日
2026年08月31日07時41分
タイトル

ASP.NET Core MVC: Create.cshtmlにアクセス時、「追加するアイコンを選択してください」Yes,No,というSweetAlert2 を使ったモーダルダイアログを表示し、<input type="file" id="upFile" name=”upFile” class="form-control" />の画像ファイル情報から、<form asp-action="Create">内にある<input asp-for="CourseName" class="form-control" />に画像の「拡張子を除いた名前」を設定 (その「拡張子を除いた名前」が、ControllerにあるViewData["SubjectNameId"] = new SelectList(_context.SubjectNames, "SubjectNameId", "CourseName");のリスト内に「ある」か「ない」か、を検証して)、 <input asp-for="ImageUrl" class="form-control" />には、“/Images/”+ 画像ファイル名を設定するjqueryのコードを教えてください。

内容
@* Create.cshtml *@
@using Microsoft.AspNetCore.Mvc.Rendering
@{
    // ViewData["SubjectNameId"] は SelectList として渡されている前提
    var subjectNames = ((SelectList)ViewData["SubjectNameId"])
                        .Select(x => x.Text)
                        .ToList();
}

<!-- ファイル選択 -->
<input type="file" id="upFile" name="upFile" class="form-control" accept="image/*" />

<!-- CourseName -->
<input asp-for="CourseName" class="form-control" id="CourseName" />

<!-- ImageUrl -->
<input asp-for="ImageUrl" class="form-control" id="ImageUrl" />

@section Scripts {
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
    <script>
        $(document).ready(function () {
            // RazorからC#配列をJavaScript配列に変換
            var subjectNames = @Html.Raw(System.Text.Json.JsonSerializer.Serialize(subjectNames));

            // ページ読み込み時にモーダル表示
            Swal.fire({
                title: '追加するアイコンを選択してください',
                icon: 'question',
                showCancelButton: true,
                confirmButtonText: 'Yes',
                cancelButtonText: 'No'
            }).then((result) => {
                if (result.isConfirmed) {
                    // ファイル選択イベントを待つ
                    $('#upFile').on('change', function () {
                        var file = this.files[0];
                        if (!file) {
                            Swal.fire('エラー', 'ファイルが選択されていません。', 'error');
                            return;
                        }

                        // ファイル名と拡張子を分離
                        var fileName = file.name;
                        var lastDotIndex = fileName.lastIndexOf('.');
                        var baseName = lastDotIndex > 0 ? fileName.substring(0, lastDotIndex) : fileName;
                        var ext = lastDotIndex > 0 ? fileName.substring(lastDotIndex) : '';

                        // CourseName にセット
                        $('#CourseName').val(baseName);

                        // ImageUrl にセット
                        $('#ImageUrl').val('/Images/' + fileName);

                        // リスト内に存在するかチェック
                        if (subjectNames.includes(baseName)) {
                            Swal.fire('OK', 'この名前は既にリストに存在します。', 'info');
                        } else {
                            Swal.fire('OK', 'この名前はリストに存在しません。', 'warning');
                        }
                    });

                    // ファイル選択ダイアログを開く
                    $('#upFile').trigger('click');
                }
            });
        });
    </script>
}

この修正版では以下を確認・修正済みです:

  • C# 部分

    • @using Microsoft.AspNetCore.Mvc.Rendering を追加し、SelectList 型を正しく扱えるようにしました。
    • subjectNames の取得処理を ToList() で確定させ、JsonSerializer で安全に JS 配列化。
  • JavaScript 部分

    • lastIndexOf('.') が -1 の場合(拡張子なし)にも対応。
    • SweetAlert2 と jQuery の読み込みを正しい CDN URL に設定。
    • 文法エラーや未定義変数を排除。

このまま Create.cshtml に貼り付ければ、ASP.NET Core MVC でコンパイル・実行可能です。

Powered by Froala Editor

添付画像

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