EntityFrameworkを使いナビゲーションプロパティを付与することで、モデルに1:Nの関係を作ることができます。
親テーブルを更新するだけで、子テーブルの更新も可能になり便利ですが「削除」「追加」がわかりません。
※子テーブルは複数ある前提です。
ここにJavaScriptで4つ目を追加します。
<input type="text" asp-for="@Model.Course[3].Price">と書くと当然エラーになります。
どのように記述すれば追加が可能なのでしょうか?
=詳細===
■データベースについて
コースという親テーブルと、カリキュラムという子テーブルがあったとします。
・コース
コースID
コース名
・カリキュラム
カリキュラムID
コースID
カリキュラム名
■モデルについて
コースとカリキュラムはナビゲーションプロパティを記述することで、コースIDを外部キーとして関連をもたせています。
・コースモデル
public virtual List<Curriculum> Curriculums { get; set; }
・カリキュラム
public virtual Course Course { get; set; }
■コントローラーについて
ある特定のコースとそれに紐付いているカリキュラム一覧画面のActionResultを以下のように作成しています。
public IActionResult Index(int? id)
{
Course course = _context.Course.
Include(c => c.Curriculums .
AsNoTracking().
Where(item => item.CourseID == id).FirstOrDefault();
return View(course);
}
上記の記述でcourseには、紐付いている複数のカリキュラムが取得できています。
■ビューについて
<Div> <h1>コース詳細</h1> <label>@Html.LabelFor(model => model.CourseID)</label> @Html.TextBoxFor(model => model.CourseID) <span asp-validation-for="CourseID" class="text-danger"></span> </Div> <h1>カリキュラム一覧</h1> @for (int idx = 0; idx < Model.Curriculums.Count; idx++){ <label class="col-1 col-form-label text-right">郵便番号</label> <input type="text" asp-for="@Model.Curriculums[idx].CurriculumsName"> <span asp-validation-for="Curriculums[idx].CurriculumName" class="text-danger"></span> }ここまでは理解できており正常な表示が確認できています。
この下に「追加」ボタンを配置し、クリックするとカリキュラムを1つ追加させたいのです。
既存のカリキュラムの更新と同じく、入力検証も行いたいのです。
Javascriptによってクライアントサイドで動的に入力欄を追加する方法を検討しておりました。
難しいようなので、(たとえば)10件などあらかじめ非表示でHTMLだけ記述しておき、追加ボタンでそのうち1件を表示に切り替えることで、擬似的な追加を実現しようと思っていますが、それくらいしかなさそうでしょうか。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー