Department model: Andmed
using System.ComponentModel.DataAnnotations;
namespace TallinnaRakenduslikKolledz.Models
{
public class Department
{
[Key]
public int DepartmentID { get; set; }
public string Name { get; set; }
public decimal Budget { get; set; }
public DateTime StartDate { get; set; }
public int? InstructorID { get; set; }
public Instructor? Administrator { get; set; }
public ICollection<Course>? Courses { get; set; }
public byte? RowVersion { get; set; }
public int? Quota { get; set; }
public string? LeaderName { get; set; }
public string? Pet { get; set; }
}
}
Department View kasutas on 3 vaadet: Index, Create, Delete.
Department Index on pea vaade kui lähed “Osakonnad” lehele
@model IEnumerable<TallinnaRakenduslikKolledz.Models.Department>
@{
ViewData["Title"] = "Osakonnad";
}
<h1>Osakonnad</h1>
<p>
<a asp-action="Create">Loo uus osakond</a>
</p>
<table class="table">
<thead>
<tr>
<th>@Html.DisplayNameFor(model => model.Name)</th>
<th>@Html.DisplayNameFor(model => model.Budget)</th>
<th>@Html.DisplayNameFor(model => model.StartDate)</th>
<th>@Html.DisplayNameFor(model => model.Administrator)</th>
<th>@Html.DisplayNameFor(model => model.RowVersion)</th>
<th>@Html.DisplayNameFor(model => model.Quota)</th>
<th>@Html.DisplayNameFor(model => model.LeaderName)</th>
<th>@Html.DisplayNameFor(model => model.Pet)</th>
<th>Tööriistad</th>
</tr>
</thead>
<tbody>
@foreach(var department in Model)
{
<tr>
<td>@Html.DisplayFor(modelItem => department.Name)</td>
<td>@Html.DisplayFor(modelItem => department.Budget)</td>
<td>@Html.DisplayFor(modelItem => department.StartDate)</td>
<td>@Html.DisplayFor(modelItem => department.Administrator)</td>
<td>@Html.DisplayFor(modelItem => department.RowVersion)</td>
<td>@Html.DisplayFor(modelItem => department.Quota)</td>
<td>@Html.DisplayFor(modelItem => department.LeaderName)</td>
<td>@Html.DisplayFor(modelItem => department.Pet)</td>
<td>
@*/* Muuda */*@
@*/* Vaata */*@
@*/* Vaata Adminit */*@
@*/* Kustuta */*@
<a asp-action="Edit" asp-route-id="@department.DepartmentID">Muuda</a>
<a asp-action="Details" asp-route-id="@department.DepartmentID">Vaata</a>
<a asp-action="Delete" asp-route-id="@department.DepartmentID">Eemalda</a>
</td>
</tr>
}
</tbody>
</table>
Department Create vaade on samas razor view’s kus on edit vaate mis laseb Osakonde lisada Indexi ja muuta nende andmeid.
@model TallinnaRakenduslikKolledz.Models.Department
@{
ViewData["Title"] = "Osakond";
}
@if (ViewBag.action == "Create")
{
<p><h3>Loo osakond:</h3></p>
<hr />
<div class="row">
<div class="col-md-8">
<form asp-action="Create">
<input type="hidden" asp-for="RowVersion" value="@Html.Raw("0")" />
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="control-label" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Budget" class="control-label"></label>
<input asp-for="Budget" class="control-label" />
<span asp-validation-for="Budget" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="StartDate" class="control-label"></label>
<input asp-for="StartDate" class="control-label" />
<span asp-validation-for="StartDate" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="InstructorID" class="control-label"></label>
<input asp-for="InstructorID" class="control-label" />
<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="control-label" />
<span asp-validation-for="Administrator" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Quota" class="control-label"></label>
<input asp-for="Quota" class="control-label" />
<span asp-validation-for="Quota" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="LeaderName" class="control-label"></label>
<input asp-for="LeaderName" class="control-label" />
<span asp-validation-for="LeaderName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Pet" class="control-label"></label>
<input asp-for="Pet" class="control-label" />
<span asp-validation-for="Pet" class="text-danger"></span>
</div>
<div>
<input type="submit" value="Sisesta" class="btn btn-primary" />
</div>
<div>
<a asp-action="Index" class="btn btn-danger">Tühista lisamine</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="DepartmentID" />
<input type="hidden" asp-for="RowVersion" value="@Html.Raw("0")" />
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="control-label" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Budget" class="control-label"></label>
<input asp-for="Budget" class="control-label" />
<span asp-validation-for="Budget" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="StartDate" class="control-label"></label>
<input asp-for="StartDate" class="control-label" />
<span asp-validation-for="StartDate" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="InstructorID" class="control-label"></label>
<input asp-for="InstructorID" class="control-label" />
<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="control-label" />
<span asp-validation-for="Administrator" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Quota" class="control-label"></label>
<input asp-for="Quota" class="control-label" />
<span asp-validation-for="Quota" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="LeaderName" class="control-label"></label>
<input asp-for="LeaderName" class="control-label" />
<span asp-validation-for="LeaderName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Pet" class="control-label"></label>
<input asp-for="Pet" class="control-label" />
<span asp-validation-for="Pet" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Sisesta" class="btn btn-primary" />
</div>
</form>
</div>
</div>
}
<div>
<a asp-action="Index">Mine tagasi loendisse</a>
</div>
Department Delete on koos edit vaadeka mis laseb Osakondasid kustutada ja nende detailse vaatada kasutades ühte ja sama vaate razor view
@model TallinnaRakenduslikKolledz.Models.Department
@{
ViewData["Title"] = ViewBag.action == "Delete" ? "Kustuta Osakond" : "Osakonna detailid";
}
<h2>@Html.DisplayFor(modelItem => Model.Name)</h2>
@if (ViewBag.action == "Delete")
{
<p>
<h3>Kustuta osakond:</h3>
</p>
}
else if (ViewBag.action == "Details")
{
<p>
<h3>Osakonna detailid</h3>
</p>
}
<div>
<hr />
<dl class ="row">
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.Name)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.Name)</dt>
</dl>
<dl>
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.Budget)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.Budget)</dt>
</dl>
<dl>
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.StartDate)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.StartDate)</dt>
</dl>
<dl>
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.Administrator)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.Administrator)</dt>
</dl>
<dl>
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.RowVersion)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.RowVersion)</dt>
</dl>
<dl>
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.Quota)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.Quota)</dt>
</dl>
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.LeaderName)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.LeaderName)</dt>
</dl>
<dl>
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.Pet)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.Pet)</dt>
</dl>
@if(ViewBag.action == "Delete")
{
<form asp-action="Delete" method="post">
@Html.AntiForgeryToken()
<input type="hidden" asp-for="DepartmentID" />
<button type="submit" class="btn btn-danger">Delete</button>
<a asp-action="Index" class="btn btn-secondary">Cancel</a>
</form>
}
else if (ViewBag.action == "Details")
{
<a asp-action="Index">Mine tagasi</a>
}
</div>
@*<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>*@
Controllers:
Seda kasutatakse, et kuvada osakondade nimekirja, lisada uusi osakonde, muuta olemasolevaid osakonde, näitada osakonna detaile ja kustutada osakonde
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using TallinnaRakenduslikKolledz.Data;
using TallinnaRakenduslikKolledz.Models;
namespace TallinnaRakenduslikKolllež.Controllers
{
public class DepartmentsController : Controller
{
private readonly SchoolContext _context;
public DepartmentsController(SchoolContext context)
{
_context = context;
}
public async Task<IActionResult> Index()
{
var schoolContext = _context.Departments.Include(d => d.Administrator);
return View(await schoolContext.ToListAsync());
}
[HttpGet]
public async Task<IActionResult> Create()
{
ViewData["action"] = "Create";
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Name,Budget,StartDate,RowVersion,Administrator,Quota,LeaderName,Pet")] Department departments)
{
ViewData["action"] = "Create";
if (ModelState.IsValid)
{
_context.Departments.Add(departments);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
// return RedirectToAction(nameof(Index))
}
return View(departments);
}
[HttpGet]
public async Task<IActionResult> Edit(int? id)
{
if (id == null)
{
return NotFound();
}
var department = await _context.Departments.FirstOrDefaultAsync(x => x.DepartmentID == id);
if (department == null)
{
return NotFound();
}
ViewData["action"] = "Edit";
return View("Create", department);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> EditConfirmed(int id, [Bind("DepartmentID,Name,Budget,StartDate,RowVersion,Administrator,Quota,LeaderName,Pet")] Department department)
{
//ViewBag.Edit = Edit(id);
//if (id != department.DepartmentID)
//{
// return NotFound();
//}
if (ModelState.IsValid)
{
_context.Departments.Update(department);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
// return RedirectToAction(nameof(Index))
}
return View(department);
}
[HttpGet]
public async Task<IActionResult> Delete(int? id)
{
if (id == null)
{
return NotFound();
}
var department = await _context.Departments.FirstOrDefaultAsync(m => m.DepartmentID == id);
if (department == null)
{
return NotFound();
}
ViewBag.action = "Delete";
return View("Delete", department);
}
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var department = await _context.Departments.FindAsync(id);
if (department == null)
{
return NotFound();
}
_context.Departments.Remove(department);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
[HttpGet]
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var department = await _context.Departments.FirstOrDefaultAsync(m => m.DepartmentID == id);
if (department == null)
{
return NotFound();
}
ViewBag.action = "Details";
return View("Delete", department);
}
}
}
Andmebaasi kontekst
private readonly SchoolContext _context;
public DepartmentsController(SchoolContext context)
{
_context = context;
}
SchoolContext on Entity Frameworki DbContext
Dependency Injectioni tehakse sellele autamaatselt
_context.Departments tähendab departmenti tabeli
Index
public async Task<IActionResult> Index()
{
var schoolContext = _context.Departments.Include(d => d.Administrator);
return View(await schoolContext.ToListAsync());
}
Näitab kõiki osakonde nimekirjas koos administaatorite andmedega vaatesse
Create Get
[HttpGet]
public async Task<IActionResult> Create()
{
ViewData["action"] = "Create";
return View();
}
Kuvab uue osakonna tegemis vormi
Create Post
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Name,Budget,StartDate,RowVersion,Administrator,Quota,LeaderName,Pet")] Department departments)
{
ViewData["action"] = "Create";
if (ModelState.IsValid)
{
_context.Departments.Add(departments);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
// return RedirectToAction(nameof(Index))
}
return View(departments);
}
salvestab osakonna andmebaasi kui vormi andmed on õiged:
Edit Get
[HttpGet]
public async Task<IActionResult> Edit(int? id)
{
if (id == null)
{
return NotFound();
}
var department = await _context.Departments.FirstOrDefaultAsync(x => x.DepartmentID == id);
if (department == null)
{
return NotFound();
}
ViewData["action"] = "Edit";
return View("Create", department);
}
kuvab osakonna muutmise vormi (kasutab sama vaadet nagu create)
Edit Post
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> EditConfirmed(int id, [Bind("DepartmentID,Name,Budget,StartDate,RowVersion,Administrator,Quota,LeaderName,Pet")] Department department)
{
//ViewBag.Edit = Edit(id);
//if (id != department.DepartmentID)
//{
// return NotFound();
//}
if (ModelState.IsValid)
{
_context.Departments.Update(department);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
// return RedirectToAction(nameof(Index))
}
return View(department);
}
salvestab muudatused andmebaasi
Details Get
[HttpGet]
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var department = await _context.Departments.FirstOrDefaultAsync(m => m.DepartmentID == id);
if (department == null)
{
return NotFound();
}
ViewBag.action = "Details";
return View("Delete", department);
}
kuvab ühe osakonna andmeid (kasutab sama vaadet nagu delete)
Delete Get
[HttpGet]
public async Task<IActionResult> Delete(int? id)
{
if (id == null)
{
return NotFound();
}
var department = await _context.Departments.FirstOrDefaultAsync(m => m.DepartmentID == id);
if (department == null)
{
return NotFound();
}
ViewBag.action = "Delete";
return View("Delete", department);
}
Kuvab kusutamise vaate id järgi
Delete Post
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
Instructor deletableInstructor = await _context.Instructors
.SingleAsync(i => i.ID == id);
_context.Instructors.Remove(deletableInstructor);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
Meetod kus leitakse osakonna id järgi ja eemaldatakse andmebaasist siis salvetatakse muudatused ja suunatakse tagasi osakonna nimekirja