Courses Controller, Mudel ja View

Controller

SchoolContext _context annab Controllerile ja Vaatele teada mis andmebaas välja näeb ning kõik informatsioon selle sees.

Index laseb meil vaadata kõik Courses informatsiooni üldiselt kasutades ToListAsync() meetodit mis paneb kõik raamatud tabelisse.

Create esimesena annab meile Create vaate ning siis kui on informatsioon antud, see kontrollib et mudel on õige ning kui on, lisab andmebaasile ja viib sind tagasi Indexisse.
Antud juhul annab ka teada ViewBag-ile et “Creation” on Tõene et vaade näitaks Creation vaadet.
See kasutab ka SaveChangesAsync et salvestada informatsiooni

Delete kustutab antud valik ära peale kui kontrollib et asi on olemas. see kasutab esimesena FirstorDefaultAsync, mis Tagastab asünkroonselt jada esimese elemendi. Ning kasutab Lambda meetodit et lühidalt näidata anonüümset meetodit.
Antud juhul annab ka ViewBag-ile teada et “Deletion” on tõene, et vaade teab mida näidata.
Ning siis salvestab andmebaasi peale kui kustutab valitud objekt ära.

Details lubab meil vaadata täpsemad informatsiooni antud objekti kohta. See kasutab samuti FirstorDefaultAsync ja Lambda meetodit. See laseb ka teada ViewBag-ile et deletion on väär et vaade näitab Detaile.

Edit lubab meil muuta antud objekti. Kasutab FirstorDefaultAsync ja Lambda meetodit. Sellel on ka post-meetod mis siis salvestab kõike mis muudeti. Laseb teada ka ViewBag-ile et Creation on väär et teab millist vaadet näidata.

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>