@* 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