Controller
The SchoolContext _context tells the Controller and View what the database looks like and all the information inside it. Index lets us view all the Courses information in general using the ToListAsync() method which puts all the books into a table. Create first gives us the Create view and then once the information is given, it checks that the model is correct and if so, adds it to the database and takes you back to the Index. In this case it also tells the ViewBag that “Creation” is True so that the view will show the Creation view. It also uses SaveChangesAsync to save the information Delete deletes the given selection after checking that it exists. It first uses FirstorDefaultAsync which returns the first element of the sequence asynchronously. And uses the Lambda method to briefly show the anonymous method. In this case it also tells the ViewBag that “Deletion” is True so that the view knows what to show. And then saves it to the database when it deletes the selected object.
Details allows us to view more detailed information about a given object. It also uses FirstorDefaultAsync and the Lambda method. It also tells ViewBag that deletion is false so that the view shows Details. Edit allows us to modify a given object. It uses FirstorDefaultAsync and the Lambda method. It also has a post method which then saves everything that was changed. It also tells ViewBag that Creation is false so that it knows which view to show.
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using TallinnaRakenduslikKolledzKaur.Data;
using TallinnaRakenduslikKolledzKaur.Models;
namespace TallinnaRakenduslikKolledzKaur.Controllers
{
public class CoursesController : Controller
{
private readonly SchoolContext _context;
public CoursesController(SchoolContext context)
{
_context = context;
}
public async Task<IActionResult> Index()
{
var courses = _context.Courses.Include(c => c.Department);
return View(await courses.ToListAsync());
}
[HttpGet]
public IActionResult Create()
{
PopulateDepartmentsDropDownList();
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Course course)
{
if (ModelState.IsValid)
{
_context.Courses.Add(course);
await _context.SaveChangesAsync();
PopulateDepartmentsDropDownList(course.DepartmentID);
}
return RedirectToAction("Index");
}
[HttpGet]
public async Task<IActionResult> Delete(int? id)
{
ViewData["deletion"] = true;
if (id == null || _context.Courses == null)
{
return NotFound();
}
var courses = await _context.Courses.Include(c =>c.Department).AsNoTracking().FirstOrDefaultAsync(m => m.CourseId == id);
if (courses == null)
{
return NotFound();
}
return View(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)
{
ViewData["deletion"] = false;
if (id == null)
{
return NotFound();
}
var courses = await _context.Courses.Include(c => c.Department).AsNoTracking().FirstOrDefaultAsync(m => m.CourseId == id);
if (courses == null)
{
return NotFound();
}
return View("Delete", courses);
}
[HttpGet]
public async Task<IActionResult> Edit(int? id)
{
PopulateDepartmentsDropDownList();
ViewData["creation"] = false;
if (id == null)
{
return NotFound();
}
var courses = await _context.Courses.Include(c => c.Department).AsNoTracking().FirstOrDefaultAsync(m => m.CourseId == id);
if (courses == null)
{
return NotFound();
}
/*_context.Departments.Update(department); */
return View("Create", courses);
}
[HttpPost, ActionName("Edit")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> EditConfirmed([Bind("CourseId,Title,Credits,Enrollments,Department,DepartmentID,CourseAssignments")] Course course)
{
_context.Courses.Update(course);
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);
}
}
}
Mudel
using System.ComponentModel.DataAnnotations;
namespace TallinnaRakenduslikKolledzKaur.Models
{
public class Course
{
[Key]
public int CourseId { get; set; }
public string Title { get; set; }
public int Credits { get; set; }
public ICollection<Enrollment>? Enrollments { get; set; }
public Department? Department { get; set; }
public int? DepartmentID { get; set; }
public ICollection<CourseAssignment>? CourseAssignments { get; set; }
}
}
View
Create ja Edit – Need kaks on samas vaates kuna see oli ülesanne, See kasutab “Viewbag”-i et kontrollida millist osa kuvada
@model TallinnaRakenduslikKolledzKaur.Models.Course
@if (ViewBag.creation == true)
{
ViewData["Title"] = "Uus Kursus";
<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.creation == false)
{
ViewData["Title"] = "Muuda Kursus";
<h1>Muuda Kursus</h1>
<hr />
<div class="row">
<div class="col-md-4">
<form asp-action="Edit">
<input type="hidden" asp-for="@Model.CourseId" />
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<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 class="form-group">
<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 class="form-group">
<label asp-for="Enrollments" class="control-label"></label>
<input asp-for="Enrollments" class="form-control" />
<span asp-validation-for="Enrollments" 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">
<label asp-for="CourseAssignments" class="control-label"></label>
<input asp-for="CourseAssignments" class="form-control" />
<span asp-validation-for="CourseAssignments" class="text-danger"></span>
</div>
<!--<div class="form-group">
<label asp-for="InstructorID" class="control-label"></label>
<input asp-for="InstructorID" class="form-control" />
<span asp-validation-for="InstructorID" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Administrator" class="control-label"></label>
<input asp-for="Administrator" class="form-control" />
<span asp-validation-for="Administrator" class="text-danger"></span>
</div> -->
<div class="form-group">
<input type="submit" asp-route-id="@Model.DepartmentID" value="Edit" class="btn btn-primary" />
</div>
</form>
</div>
</div>
<div>
<a asp-action="Index">Mine tagasi loendisse</a>
</div>
Delete ja Edit – Need kaks on samas vaates, kasutab samat ViewBag-i et kontrollida millist asja kuvada.
@model TallinnaRakenduslikKolledzKaur.Models.Course
@if (ViewBag.deletion == true)
{
ViewData["Title"] = "Kustuta Kursus";
<h2>@Html.DisplayFor(modelItem => Model.Title)</h2>
<p>
<h3>Kustuta Kursus:</h3>
</p>
<div>
<hr />
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.Title)</dt>
<dt class="col-sm-2">@Html.DisplayFor(Model => Model.Title)</dt>
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.Credits)</dt>
<dt class="col-sm-2">@Html.DisplayFor(Model => Model.Credits)</dt>
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.Enrollments)</dt>
<dt class="col-sm-2">@Html.DisplayFor(Model => Model.Enrollments)</dt>
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.Department)</dt>
<dt class="col-sm-2">@Html.DisplayFor(Model => Model.Department)</dt>
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.DepartmentID)</dt>
<dt class="col-sm-2">@Html.DisplayFor(Model => Model.DepartmentID)</dt>
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.CourseAssignments)</dt>
<dt class="col-sm-2">@Html.DisplayFor(Model => Model.CourseAssignments)</dt>
<form asp-action="Delete">
<input type="hidden" asp-for="CourseId" />
<input type="submit" value="Kustuta Osakond" class="btn btn-danger" /> | <a asp-action="Index">Tühista</a>
</form>
</div>
}
else if (ViewBag.deletion == false)
{
ViewData["Title"] = "Viewing Kursus";
<div>
<h4>Kursus @Model.Title</h4>
<hr />
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.Title)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.Title)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.Credits)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.Credits)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.Enrollments)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.Enrollments)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.Department)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.Department)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.DepartmentID)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.DepartmentID)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.CourseAssignments)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.CourseAssignments)</dd>
</dl>
</div>
<form asp-action="Tagasi">
<input type="hidden" asp-for="DepartmentID" />
<a asp-action="Index">Tagasi</a>
</form>
}
Index
@model IEnumerable<TallinnaRakenduslikKolledzKaur.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>Department</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>
<td>@Html.DisplayFor(modelItem => course.Department.Administrator.FullName) </td>
<td><a asp-action="Delete" asp-route-id="@course.CourseId">Kustuta</a>
<a asp-action="Details" asp-route-id="@course.CourseId">Details</a>
<a asp-action="Edit" asp-route-id="@course.CourseId">Edit</a></td>
</tr>
}
</tbody>
</table>