Course model: Andmed
using System.ComponentModel.DataAnnotations;
namespace TallinnaRakenduslikKolledz.Models
{
public class Course
{
[Key]
public int ID { get; set; }
public string Title { get; set; }
public int Credits { get; set; }
public Department? Department { get; set; }
public int? DepartmentID { get; set; }
public ICollection<Enrollment>? Enrollments { get; set; }
public ICollection<CourseAssignment>? CourseAssignments { get; set; }
}
}
Course View kaustas on 3 vaadet: Index, Create, Delete.
Course Index on pea vaade kui lähed “Kursused” lehele
@model IEnumerable<TallinnaRakenduslikKolledz.Models.Course>
@{
ViewData["Title"] = "Kursused/Õppeained";
}
<h2>Kursused</h2>
<p>
<a asp-action="Create">Tee uus Kursus</a>
</p>
<table class="table">
<thead>
<tr>
@*<th> @Html.DisplayNameFor(model => model.ID)</th>*@
<th> @Html.DisplayNameFor(model => model.Title)</th>
<th> @Html.DisplayNameFor(model => model.Credits)</th>
<th> @Html.DisplayNameFor(model => model.Department.Name)</th>
@* <th> @Html.DisplayNameFor(model => model.Department.Administrator.FullName)</th>*@
<th>Tööriistad</th>
</tr>
</thead>
<tbody>
@foreach (var course in Model)
{
<tr>
@*<th>
@Html.DisplayFor(modelItem => course.ID)
</th>*@
<th>
@Html.DisplayFor(modelItem => course.Title)
</th>
<th>
@Html.DisplayFor(modelItem => course.Credits)
</th>
<th>
@Html.DisplayFor(modelItem => course.Department.Name)
</th>
@* <tr>
@Html.DisplayFor(modelItem => course.Department.Administrator.FullName)
</tr>*@
<th>
<a asp-action="Edit" asp-route-id="@course.ID">Muuda</a>
<a asp-action="Details" asp-route-id="@course.ID">Vaata</a>
<a asp-action="Delete" asp-route-id="@course.ID">Kustuta</a>
</th>
</tr>
}
</tbody>
</table>
Course Create vaade on samas razor view’s kus on edit vaate mis laseb kursusi lisada Indexi ja muuta nende andmeid.
@model TallinnaRakenduslikKolledz.Models.Course
@{
ViewData["Title"] = "Uus kursus";
}
@if (ViewBag.action == "Create")
{
<h1>Tee uus kursus</h1>
<h4>Sisesta info:</h4>
<hr />
<div class="row">
<div class="col-md-4">
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
@*<div>
<label asp-for="ID" class="control-label"></label>
<input asp-for="ID" class="form-control"/>
<span asp-validation-for="ID" class="text-danger"></span>
</div>*@
<div>
<label asp-for="Title" class="control-label"></label>
<input asp-for="Title" class="form-control"/>
<span asp-validation-for="Title" class="text-danger"></span>
</div>
<div>
<label asp-for="Credits" class="control-label"></label>
<input asp-for="Credits" class="form-control"/>
<span asp-validation-for="Credits" class="text-danger"></span>
</div>
<div>
<label asp-for="Department" class="control-label"></label>
<select asp-for="DepartmentID" class="form-control" asp-items="ViewBag.DepartmentID">
<option value="" class="form-control">-- Vali osakond--</option>
</select>
<span asp-validation-for="DepartmentID" class="text-danger"></span>
</div>
<div class=" form-group">
<input type="submit" value="Tee uus" class="btn btn-primary" /> | <a asp-action="Index" class="btn btn-outline-primary">Tühista</a>
</div>
</form>
</div>
</div>
}
else if(ViewBag.action == "Edit")
{
<p>
<h3>Muuda osakonda</h3>
</p>
<hr />
<div class="row">
<div class="col-md-8">
<form asp-action="EditConfirmed">
<input type="hidden" asp-for="ID" />
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
@* <div>
<label asp-for="ID" class="control-label"></label>
<input asp-for="ID" class="form-control"></input>
<span asp-validation-for="ID" class="text-danger"></span>
</div>@**@
<div class="form-group">
<label asp-for="Title" class="control-label"></label>
<input asp-for="Title" class="control-label" />
<span asp-validation-for="Title" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Credits" class="control-label"></label>
<input asp-for="Credits" class="control-label" />
<span asp-validation-for="Credits" class="text-danger"></span>
</div>
<div>
<label asp-for="Department" class="control-label"></label>
<select asp-for="DepartmentID" class="form-control" asp-items="ViewBag.DepartmentID">
<option value="" class="form-control">-- Vali osakond--</option>
</select>
<span asp-validation-for="DepartmentID" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Sisesta" class="btn btn-primary" />
</div>
</form>
</div>
</div>
}
Course Delete on koos edit vaadeka mis laseb kursuseid kustutada ja nende detaile vaatada kasutades ühte ja sama razor view
@model TallinnaRakenduslikKolledz.Models.Course
@{
ViewData["Title"] = "Kustuta kursus";
}
@if (ViewBag.action == "Delete")
{
<h1>Kustata @Html.DisplayFor(Model => Model.Title)</h1>
<h3>Oled kindel?</h3>
<div>
<h4>Kursus</h4>
<hr />
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.ID)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.ID)</dt>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.Title)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.Title)</dt>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.Credits)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.Credits)</dt>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.DepartmentID)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.DepartmentID)</dt>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.Enrollments)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.Enrollments)</dt>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.CourseAssignments)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.CourseAssignments)</dt>
</dl>
<form asp-action="Delete">
<input type="hidden" asp-for="ID"/>
<input type="submit" value="Kustuta" class="btn btn-danger"/> | <a asp-action="Index">Tühista</a>
</form>
</div>
}
else if(ViewBag.action == "Details")
{
<h1>Andmed</h1>
<div>
<h4>Kursus</h4>
<hr />
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.ID)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.ID)</dt>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.Title)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.Title)</dt>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.Credits)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.Credits)</dt>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.DepartmentID)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.DepartmentID)</dt>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.Enrollments)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.Enrollments)</dt>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.CourseAssignments)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.CourseAssignments)</dt>
</dl>
<a asp-action="Index">Mine tagasi</a>
</div>
}
Controllers:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using TallinnaRakenduslikKolledz.Data;
using TallinnaRakenduslikKolledz.Models;
namespace TallinnaRakenduslikKolllež.Controllers
{
public class CoursesController : Controller
{
private readonly SchoolContext _context;
public CoursesController(SchoolContext context)
{
_context = context;
}
public IActionResult Index()
{
var courses = _context.Courses.Include(c => c.Department)
.AsNoTracking();
Console.WriteLine(courses);
return View(courses);
}
[HttpGet]
public IActionResult Create()
{
ViewData["action"] = "Create";
PopulateDepartmentsDropDownList();
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Title,Credits,Department,DepartmentID,Enrollments,CourseAssignments")]Course courses)
{
ViewData["action"] = "Create";
if (ModelState.IsValid)
{
_context.Courses.Add(courses);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
//PopulateDepartmentsDropDownList(course.DepartmentID);
}
PopulateDepartmentsDropDownList();
return View(courses);
}
[HttpGet]
public async Task<IActionResult> Edit(int? id)
{
if (id == null)
{
return NotFound();
}
var courses = await _context.Courses.FirstOrDefaultAsync(r => r.ID == id);
if (courses == null)
{
return NotFound();
}
ViewData["action"] = "Edit";
return View("Create", courses);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> EditConfirmed(int id, [Bind("ID,Title,Credits,Department,DepartmentID,Enrollments,CourseAssignments")] Course courses)
{
if (ModelState.IsValid)
{
_context.Courses.Update(courses);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(courses);
}
[HttpGet]
public async Task<IActionResult> Delete(int? id)
{
if (id == null)
{
return NotFound();
}
var courses = await _context.Courses.FirstOrDefaultAsync(m => m.ID == id);
if (courses == null)
{
return NotFound();
}
ViewBag.action = "Delete";
return View("Delete", courses);
}
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed (int id)
{
var courses = await _context.Courses.FindAsync(id);
if (courses == null)
{
return NotFound();
}
_context.Courses.Remove(courses);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
private void PopulateDepartmentsDropDownList(object selectedDepartment = null)
{
var departmentsQuery = from d in _context.Departments
orderby d.Name
select d;
ViewBag.DepartmentID = new SelectList(departmentsQuery.AsNoTracking(), "DepartmentID", "Name", selectedDepartment);
}
[HttpGet]
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var courses = await _context.Courses.FirstOrDefaultAsync(m => m.ID == id);
if (courses == null)
{
return NotFound();
}
ViewBag.action = "Details";
return View("Delete", courses);
}
}
}
Andmebaasi kontekst
private readonly SchoolContext _context;
public CoursesController(SchoolContext context)
{
_context = context;
}
SchoolContext on Entity Frameworki DbContext
Dependency Injectioni tehakse sellele autamaatselt
_context.Courses tähendab Course tabeli
Index
public IActionResult Index()
{
var courses = _context.Courses.Include(c => c.Department)
.AsNoTracking();
Console.WriteLine(courses);
return View(courses);
}
Näitab kõiki kursuseid nimekirjas koos osakonna andmedega vaatesse
Create Get
[HttpGet]
public IActionResult Create()
{
ViewData["action"] = "Create";
PopulateDepartmentsDropDownList();
return View();
}
Kuvab uue kursuse tegemis vormi ja täidab rippmenüü osakondade jaoks
Create Post
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Title,Credits,Department,DepartmentID,Enrollments,CourseAssignments")]Course courses)
{
ViewData["action"] = "Create";
if (ModelState.IsValid)
{
_context.Courses.Add(courses);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
//PopulateDepartmentsDropDownList(course.DepartmentID);
}
PopulateDepartmentsDropDownList();
return View(courses);
}
salvestab kursuse andmebaasi kui vormi andmed on õiged:
Edit Get
[HttpGet]
public async Task<IActionResult> Edit(int? id)
{
if (id == null)
{
return NotFound();
}
var courses = await _context.Courses.FirstOrDefaultAsync(r => r.ID == id);
if (courses == null)
{
return NotFound();
}
ViewData["action"] = "Edit";
return View("Create", courses);
}
kuvab kursuse muutmise vormi (kasutab sama vaadet nagu create)
Edit Post
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> EditConfirmed(int id, [Bind("ID,Title,Credits,Department,DepartmentID,Enrollments,CourseAssignments")] Course courses)
{
if (ModelState.IsValid)
{
_context.Courses.Update(courses);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(courses);
}
salvestab muudatused andmebaasi
Details Get
[HttpGet]
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var courses = await _context.Courses.FirstOrDefaultAsync(m => m.ID == id);
if (courses == null)
{
return NotFound();
}
ViewBag.action = "Details";
return View("Delete", courses);
}
kuvab ühe kursuse andmeid (kasutab sama vaadet nagu delete)
Delete Get
[HttpGet]
public async Task<IActionResult> Delete(int? id)
{
if (id == null)
{
return NotFound();
}
var courses = await _context.Courses.FirstOrDefaultAsync(m => m.ID == id);
if (courses == null)
{
return NotFound();
}
ViewBag.action = "Delete";
return View("Delete", courses);
}
Kuvab kusutamise vaate id järgi
Delete Post
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed (int id)
{
var courses = await _context.Courses.FindAsync(id);
if (courses == null)
{
return NotFound();
}
_context.Courses.Remove(courses);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
Kustutab kursuse andmebaasist