Courses mudel
using System.ComponentModel.DataAnnotations;
namespace TallinnaRakenduslikKolllež.Models
{
public class Course
{
[Key]
public int CourseID { 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; }
}
}
View:
Index View- kuvab tähtsamad andmed ja funktsioonide nupud.
@model IEnumerable<TallinnaRakenduslikKolllež.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.CourseID)</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>
<td>
@Html.DisplayFor(modelItem => course.CourseID)
</td>
<td>
@Html.DisplayFor(modelItem => course.Title)
</td>
<td>
@Html.DisplayFor(modelItem => course.Credits)
</td>
<td>
@Html.DisplayFor(modelItem => course.Department.Name)
</td>
@* <tr>
@Html.DisplayFor(modelItem => course.Department.Administrator.FullName)
</tr>*@
<th>
<a asp-action="Delete" asp-route-id="@course.CourseID">Kustuta</a>
<a asp-action="Details" asp-route-id="@course.CourseID">Vaata</a>
<a asp-action="Edit" asp-route-id="@course.CourseID">Muuda</a>
</tr>
}
</tbody>
</table>
Create View – vaade laseb luua uued õpetajad
Edit view- kuvab kõik andmed ja saad neid konfigureerida.
Kasutab Viewbag – ehk tulenevalt päringust tuleb kas Create või Edit.
@model TallinnaRakenduslikKolllež.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="CourseID" class="control-label"></label>
<input asp-for="CourseID" class="form-control">
<span asp-validation-for="CourseID" 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="CourseID" />
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
@* <div>
<label asp-for="CourseID" class="control-label"></label>
<input asp-for="CourseID" class="form-control"></input>
<span asp-validation-for="CourseID" 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" /> | <a asp-action="Index" class="btn btn-outline-primary">Tühista</a>
</div>
</form>
</div>
</div>
}
Delete View- kuvab andmed ja delete nupu
Details View – kuvab kõik andmed’
Kasutab Viewbag – ehk tulenevalt päringust tuleb kas Create või Edit.
@model TallinnaRakenduslikKolllež.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.CourseID)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.CourseID)</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>
<form asp-action="Delete">
<input type="hidden" asp-for="CourseID" />
<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.CourseID)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.CourseID)</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>
<a asp-action="Index">Mine tagasi</a>
</div>
}
Controller:
Kasutab SchoolContexti, et suhelda andmebaasiga.
Index- funktsioon laeb kõik kursused andmebaasist koos nende osakondade infoga ja kuvab need vaates. See kasutab AsNoTracking meetodit, kuna andmeid ainult loetakse.
Create- GET meetod kuvab tühja vormi uue kursuse loomiseks ja täidab osakondade rippmenüü. POST meetod võtab vastu vormist saadetud andmed, kontrollib nende kehtivust ja kui kõik on korras, salvestab uue kursuse andmebaasi ning suunab kasutaja tagasi Index vaatele.
Delete – GET meetod leiab kursuse ID järgi ja kuvab kinnitusvaate, POST meetod (DeleteConfirmed) teostab tegeliku kustutamise andmebaasist pärast kinnitust.
Details funktsioon leiab ja kuvab ID järgi ühe konkreetse kursuse detailse info, kasutades selleks Delete vaadet.
Edit – GET laeb kursuse andmed vormi ja POST (EditConfirmed) salvestab muudatused andmebaasi.
PopulateDepartmentsDropDownList täidab osakondade rippmenüü sorteeritud nimekirjaga, et kasutaja saaks kursusele osakonna valida.
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using TallinnaRakenduslikKolllež.Data;
using TallinnaRakenduslikKolllež.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(Course courses)
{
if (ModelState.IsValid)
{
_context.Courses.Add(courses);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
// PopulateDepartmentsDropDownList(course.DepartmentID);
}
return View(courses);
}
[HttpGet]
public async Task<IActionResult> Delete(int? id)
{
if (id == null)
{
return NotFound();
}
var courses = await _context.Courses.FirstOrDefaultAsync(m => m.CourseID == id);
if (courses == null)
{
return NotFound();
}
ViewBag.action = "Delete";
return View("Delete", courses);
}
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
if (_context.Courses == null)
{
return NotFound();
}
var course = await _context.Courses.FindAsync(id);
if (course != null)
{
_context.Courses.Remove(course);
}
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
[HttpGet]
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var courses = await _context.Courses.FirstOrDefaultAsync(m => m.CourseID == id);
if (courses == null)
{
return NotFound();
}
ViewBag.action = "Details";
return View("Delete", courses);
}
[HttpGet]
public async Task<IActionResult> Edit(int? id)
{
ViewData["action"] = "Edit";
if (id == null)
{
return NotFound();
}
var courses = await _context.Courses.FirstOrDefaultAsync(r => r.CourseID == id);
if (courses == null)
{
return NotFound();
}
{
PopulateDepartmentsDropDownList();
return View("Create", courses);
}
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> EditConfirmed(int id, [Bind("CourseID,Title,Credits,DepartmentID,Department,Enrollments,CourseAssignments")] Course courses)
{
ViewData["action"] = "EditConfirmed";
if (ModelState.IsValid)
{
_context.Courses.Update(courses);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(courses);
}
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);
}
}
}