Department Mudel
using System.ComponentModel.DataAnnotations;
namespace TallinnaRakenduslikKolllež.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; }
/** 3 oma omadust**/
public string? PhoneNumber { get; set; }
public DateTime? EndDate { get; set; }
public bool? IsDeleted { get; set; }
}
}
View
Index View- kuvab tähtsamad andmed ja funktsioonide nupud.
@model IEnumerable<TallinnaRakenduslikKolllež.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.PhoneNumber)</th>
<th>@Html.DisplayNameFor(Model => Model.EndDate)</th>
<th>@Html.DisplayNameFor(Model => Model.IsDeleted)</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.PhoneNumber)</td>
<td>@Html.DisplayFor(modelItem => department.EndDate)</td>
<td>@Html.DisplayFor(modelItem => department.IsDeleted)</td>
<td>
@* /* Muuda */ *@
<a asp-action="Edit" asp-route-id="@department.DepartmentID" class="btn btn-primary">Edit</a>
@* /* Vaata */ *@
<a asp-action="Details" asp-route-id="@department.DepartmentID" class="btn btn-primary">Details</a>
@* /* Vaata Adminit */ *@
@* /* Kustuta */ *@
<a asp-action="Delete" asp-route-id="@department.DepartmentID" class="btn btn-danger">Kustuta</a>
</td>
</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.Department
@{
ViewData["Title"] = "Osakond";
}
@if (ViewBag.action == "Create")
{
<P>
<h3>Loo osakond:</h3>
</P>
}
else if (ViewBag.action == "Edit")
{
<p>
<h3>Muuda osakonda</h3>
</p>
}
<h2>@Html.DisplayFor(modelItem => Model.Name)</h2>
<hr />
@if (ViewBag.action == "Create")
{
<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="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="PhoneNumber" class="control-label"></label>
<input asp-for="PhoneNumber" class="control-label" />
<span asp-validation-for="PhoneNumber" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="EndDate" class="control-label"></label>
<input asp-for="EndDate" class="control-label" />
<span asp-validation-for="EndDate" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="IsDeleted" class="control-label"></label>
<input asp-for="IsDeleted" class="control-label" />
<span asp-validation-for="IsDeleted" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" /> | <a asp-action="Index"
class="btn btn-danger">Tühista Loomine</a>
</div>
</form>
</div>
</div>
}
else if (ViewBag.action == "Edit")
{
{
<div class="row">
<div class="col-md-8">
<form asp-action="EditConfirmed">
<input type="hidden" asp-for="DepartmentID" />
<input type="hidden" asp-for="RowVersion" />
<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="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="PhoneNumber" class="control-label"></label>
<input asp-for="PhoneNumber" class="control-label" />
<span asp-validation-for="PhoneNumber" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="EndDate" class="control-label"></label>
<input asp-for="EndDate" class="control-label" />
<span asp-validation-for="EndDate" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="IsDeleted" class="control-label"></label>
<input asp-for="IsDeleted" class="control-label" />
<span asp-validation-for="IsDeleted" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Muuda" class="btn btn-primary" /> | <a asp-action="Index"
class="btn btn-danger">Tühista Loomine</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.Department
@{
ViewData["Title"] = "Kustuta Osakond";
}
<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 andmed</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>
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.Budget)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.Budget)</dt>
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.StartDate)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.StartDate)</dt>
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.Administrator)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.Administrator)</dt>
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.RowVersion)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.RowVersion)</dt>
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.PhoneNumber)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.PhoneNumber)</dt>
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.EndDate)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.EndDate)</dt>
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.IsDeleted)</dt>
<dt class="col-sm-2">@Html.DisplayFor(model => model.IsDeleted)</dt>
</dl>
@if (ViewBag.action == "Delete")
{
<form asp-action="DeleteConfirmed">
<input type="hidden" asp-for="DepartmentID" />
<input type="hidden" asp-for="RowVersion" />
<input type="submit" value="Kustuta" class="btn btn-danger" />
<a asp-action="Index">Tühista</a>
</form>
}
else if (ViewBag.action == "Details")
{
<a asp-action="Index">Mine tagasi</a>
}
</div>
Controller:
Kasutab SchoolContexti, et suhelda andmebaasiga.
Index- laeb asünkroonselt kõik osakonnad andmebaasist koos nende administraatorite infoga (Include meetodiga) ja kuvab need listis.
Create- GET kuvab tühja vormi, kuhu saab sisestada uue osakonna andmed. POST meetod võtab vastu vormist saadetud andmed, kontrollib nende kehtivust ModelState abil ja kui kõik on korrektne, lisab uue osakonna andmebaasi ning suunab kasutaja tagasi indexisse.
Delete – GET otsib osakonna ID järgi, laeb ka administraatori info ja kuvab kinnitusvaate, POST meetod (DeleteConfirmed) kontrollib esmalt, kas selline osakond tõesti eksisteerib andmebaasis, ja kui jah, siis eemaldab selle ning salvestab muudatused.
Details funktsioon leiab ja kuvab ID järgi ühe konkreetse osakonna detailse info, kasutades selleks Delete vaadet.
Edit – GET laeb Osakonna andmed vormi ja POST (EditConfirmed) salvestab muudatused andmebaasi.
Kõik POST meetodid kasutavad ValidateAntiForgeryToken atribuuti, mis kaitseb rakendust CSRF (cross-site request forgery) rünnakute eest. ViewData[“action”] kasutatakse vaadetes, et eristada millist tegevust parajasti tehakse.
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using TallinnaRakenduslikKolllež.Data;
using TallinnaRakenduslikKolllež.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,Administrator ,RowVersion, PhoneNumber, EndDate, IsDeleted ")] 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> Delete(int? id)
{
ViewData["action"] = "Delete";
if (id == null)
{
return NotFound();
}
var department = await _context.Departments
.Include(d => d.Administrator)
.FirstOrDefaultAsync(d => d.DepartmentID == id);
if (department == null)
{
return NotFound();
}
return View(department);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(Department department)
{
ViewData["action"] = "Delete";
if (await _context.Departments.AnyAsync(m => m.DepartmentID == department.DepartmentID))
{
_context.Departments.Remove(department);
await _context.SaveChangesAsync();
}
return RedirectToAction("Index");
}
[HttpGet]
public async Task<IActionResult> Details(int? id)
{
ViewData["action"] = "Details";
if (id == null) { return NotFound(); }
var department = await _context.Departments.FirstOrDefaultAsync(d => d.DepartmentID == id);
return View(nameof(Delete), department);
}
[HttpGet]
public async Task<IActionResult> Edit(int? id)
{
ViewData["action"] = "Edit";
if (id == null)
{
return NotFound();
}
var department = await _context.Departments.FirstOrDefaultAsync(x => x.DepartmentID == id);
if (department == null)
{
return NotFound();
}
return View(nameof(Create), department);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> EditConfirmed([Bind("DepartmentID, Name, Budget, StartDate,Administrator ,RowVersion, PhoneNumber, EndDate, IsDeleted")] Department department)
{
ViewData["action"] = "Edit";
if (ModelState.IsValid)
{
_context.Departments.Update(department);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return RedirectToAction("Index");
}
}
}