Mudel
using System.ComponentModel.DataAnnotations;
namespace TallinnaRakenduslikKolledz.Models
{
public class Student
{
[Key]
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime? EnrollmentDate { get; set; }
public ICollection<Enrollment>? Enrollments { get; set; }
public DateTime? BirthDate { get; set; }
public string? email { get; set; }
public int? Age { get; set; }
public string? Gender { get; set; }
public string? Group { get; set; }
}
}
See klass määrab ära, millised andmed ühe õpilase kohta andmebaasis salvestatakse ning seda kasutatakse Controllerites ja View’des, et andmeid lisada, muuta, kuvada ja kustutada.
Controller
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using TallinnaRakenduslikKolledz.Data;
using TallinnaRakenduslikKolledz.Models;
namespace TallinnaRakenduslikKolledz.Controllers
{
public class StudentsController : Controller
{
private readonly SchoolContext _context;
public StudentsController(SchoolContext context)
{
_context = context;
}
public async Task<IActionResult> Index()
{
return View(await _context.Students.ToListAsync());
}
[HttpGet]
public IActionResult Create()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind
("Id, FirstName, LastName, Gender, EnrollmentDate, Age, email")] Student student)
{
if (ModelState.IsValid)
{
_context.Students.Add(student);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
// return RedirectToAction(nameof(Index))
}
return View(student);
}
//Delete
[HttpGet]
public async Task<IActionResult> Delete(int? id)
{
if (id == null)
{
return NotFound();
}
var student = await _context.Students.FirstOrDefaultAsync(m => m.Id == id);
if (student == null)
{
return NotFound();
}
return View(student);
}
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var student = await _context.Students.FindAsync(id);
_context.Students.Remove(student);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
//Edit
[HttpGet]
public async Task<IActionResult> Edit(int? Id)
{
var student = await _context.Students.FirstOrDefaultAsync(m => m.Id == Id);
if (Id == null)
{
return NotFound();
}
if (student == null)
{
return NotFound();
}
_context.Students.Update(student);
return View(student);
}
[HttpPost, ValidateAntiForgeryToken, ActionName("Edit")]
public async Task<IActionResult> EditConfirmed(int id, [Bind("Id, LastName, FirstName")] Student student)
{
_context.Students.Update(student);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
//Details
[HttpGet]
public async Task<IActionResult> Details(int? id)
{
var student = await _context.Students.FirstOrDefaultAsync(m => m.Id == id);
return View(student);
}
}
}
StudentsController vastutab õpilastega seotud tegevuste eest.
See kontrollib kasutaja päringuid, suhtleb andmebaasiga läbi SchoolContext ning suunab kasutaja vastavatesse vaadetesse.
Index
Index kuvab kõik andmebaasis olevad õpilased.
- Kasutab _context.Students.ToListAsync()
- ToListAsync() on LINQ meetod, mis toob kõik kirjed andmebaasist asünkroonselt
- Andmed saadetakse Index vaatesse tabelina kuvamiseks
Create (GET)
Avab vaate, kus kasutaja saab sisestada uue õpilase andmed.
Create (POST)
Salvestab uue õpilase andmebaasi.
- Kasutab [Bind], et määrata, millised väljad on lubatud
- Kontrollib ModelState.IsValid, et andmed oleksid korrektselt sisestatud.
- Lisab uue õpilase _context.Students.Add(student)
- Salvestab muudatused SaveChangesAsync() abil
- Suunab kasutaja tagasi Index vaatesse
Delete (GET)
Kuvab kustutamise kinnituse vaate.
- Kontrollib, kas id on olemas
- Kasutab FirstOrDefaultAsync(m => m.Id == id), lambda avaldis, selleks, et lühidalt leidma esimese sobiva õpilase id järgi.
- Kui õpilast pole võimalik leidma, tagastatakse NotFound()
DeleteConfirmed (POST)
Kustutab õpilase lõplikult andmebaasist.
- Kasutab FindAsync(id), et leida objekt primaarvõtme järgi
- Eemaldab objekti Remove() abil
- Salvestab muudatused SaveChangesAsync() abil
- Suunab tagasi Index vaatesse
Edit (GET)
Avab vaate, kus saab õpilase andmeid muuta.
- Kasutab FirstOrDefaultAsync(m => m.Id == Id)
- Kontrollib, kas ID ja objekt on olemas
- Saadab leitud õpilase Edit vaatesse
EditConfirmed (POST)
Salvestab muudetud õpilase andmed.
- Kasutab [Bind], et määrata, millised väljad on lubatud
- Uuendab andmed _context.Students.Update(student)
- Salvestab muudatused SaveChangesAsync() abil
- Suunab kasutaja Index vaatesse
Details
Kuvab ühe konkreetse õpilase detailse info.
- Leiab õpilase FirstOrDefaultAsync(m => m.Id == id) abil
- Saadab andmed Details vaatesse kuvamiseks
Vaated
Index
@model IEnumerable<TallinnaRakenduslikKolledz.Models.Student>
@{
ViewData["Title"] = "Õpilased";
}
<h1>Õpilaste Loend</h1>
<p>
<a asp-action="Create">Sisesta Õpilane</a>
</p>
<table class ="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(Model => Model.LastName)
</th>
<th>
@Html.DisplayNameFor(Model => Model.FirstName)
</th>
<th>
@Html.DisplayNameFor(Model => Model.EnrollmentDate)
</th>
<th>
@Html.DisplayNameFor(Model => Model.Age)
</th>
<th>
Tööriistad
</th>
</tr>
</thead>
<tbody>
@foreach (var student in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => student.LastName)
</td>
<td>
@Html.DisplayFor(modelItem => student.FirstName)
</td>
<td>
@Html.DisplayFor(modelItem => student.EnrollmentDate)
</td>
<td>
@Html.DisplayFor(modelItem => student.Age)
</td>
<td>
<a asp-action="Edit" asp-route-id="@student.Id">Muuda</a>
<a asp-action="Details" asp-route-id="@student.Id">Vaata</a>
<a asp-action="Delete" asp-route-id="@student.Id">Kustuta</a>
</td>
</tr>
}
</tbody>
</table>
Edit
@model IEnumerable<TallinnaRakenduslikKolledz.Models.Student>
@{
ViewData["Title"] = "Õpilased";
}
<h1>Õpilaste Loend</h1>
<p>
<a asp-action="Create">Sisesta Õpilane</a>
</p>
<table class ="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(Model => Model.LastName)
</th>
<th>
@Html.DisplayNameFor(Model => Model.FirstName)
</th>
<th>
@Html.DisplayNameFor(Model => Model.EnrollmentDate)
</th>
<th>
@Html.DisplayNameFor(Model => Model.Age)
</th>
<th>
Tööriistad
</th>
</tr>
</thead>
<tbody>
@foreach (var student in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => student.LastName)
</td>
<td>
@Html.DisplayFor(modelItem => student.FirstName)
</td>
<td>
@Html.DisplayFor(modelItem => student.EnrollmentDate)
</td>
<td>
@Html.DisplayFor(modelItem => student.Age)
</td>
<td>
<a asp-action="Edit" asp-route-id="@student.Id">Muuda</a>
<a asp-action="Details" asp-route-id="@student.Id">Vaata</a>
<a asp-action="Delete" asp-route-id="@student.Id">Kustuta</a>
</td>
</tr>
}
</tbody>
</table>
Details
@model TallinnaRakenduslikKolledz.Models.Student
@{
ViewData["Title"] = "Vaata õpilase andmeid";
}
<h1>Õpilase andmed</h1>
<div>
<h4>Õpilane @Model.FirstName @Model.LastName</h4>
<hr/>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.LastName)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.LastName)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.FirstName)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.FirstName)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.EnrollmentDate)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.EnrollmentDate)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.Gender)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.Gender)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.Age)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.Age)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.email)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.email)</dd>
</dl>
</div>
<div>
<a asp-action="Index">Mine tagasi loendisse</a>
</div>
Delete
@model TallinnaRakenduslikKolledz.Models.Student
@{
ViewData["Title"] = "Kustuta õpilane";
}
<h1>Kustuta õpilane</h1>
<h3>
Kas oled kindel, et tahad õpilast @Model.FirstName @Model.LastName eemaldada?
</h3>
<div>
<h4>Õpilane @Model.FirstName @Model.LastName</h4>
<hr />
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.LastName)</dt>
<dd class="col-sm-10">@Html.DisplayFor(model => model.LastName)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.FirstName)</dt>
<dd class="col-sm-10">@Html.DisplayFor(model => model.FirstName)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.EnrollmentDate)</dt>
<dd class="col-sm-10">@Html.DisplayFor(model => model.EnrollmentDate)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(model => model.Age)</dt>
<dd class="col-sm-10">@Html.DisplayFor(model => model.Age)</dd>
</dl>
@if (Model.Enrollments != null)
{
foreach (var courseEnrollment in Model.Enrollments)
{
<dl class="row">
<dd class="col-sm-10">@(courseEnrollment)</dd>
</dl>
}
}
@if (Model.Gender != null)
{
@Model.Gender;
}
@if (Model.Group != null)
{
@Model.Group;
}
</div>
<form asp-action="Delete">
<input type="hidden" asp-for="Id"/>
<input type="submit" value="Kustuta õpilane" class="btn btn-danger"/> | <a asp-action="Index">Tühista</a>
</form>
Create
@model TallinnaRakenduslikKolledz.Models.Student
@{
ViewData["Title"] = "Loo uus õpilane";
}
<h1>Loo uus õpilane</h1>
<hr/>
<div class="row">
<div class="col-md-4">
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="FirstName" class="control-label"></label>
<input asp-for="FirstName" class="form-control" />
<span asp-validation-for="FirstName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="LastName" class="control-label"></label>
<input asp-for="LastName" class="form-control" />
<span asp-validation-for="LastName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Gender" class="control-label"></label>
<input asp-for="Gender" class="form-control" />
<span asp-validation-for="Gender" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="EnrollmentDate" class="control-label"></label>
<input asp-for="EnrollmentDate" class="form-control" />
<span asp-validation-for="EnrollmentDate" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Age" class="control-label"></label>
<input asp-for="Age" class="form-control" />
<span asp-validation-for="Age" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="email" class="control-label"></label>
<input asp-for="email" class="form-control" />
<span asp-validation-for="email" 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>