Õpilased peavad oma WordPressi portfoolios kirjeldama TallinaRakenduslikKolledž, mille nad on ise teinud.
Kirjelduses peaks olema:
- projekti eesmärk ja lühike selgitus,
- koodinäited, mis on esitatud koodina (mitte pildina),
- ning selgitus, kuidas see projekt töötab.
- Kirjeldage lahti kuidas te projektis rakendate MVC struktuuri
- Igas vaadete kausta kohta kirjeldate mida iga vaade teeb
- Kõikides kontrollerites olevad meetodid kirjeldate lahti, Selgitate ära millised LINQ meetodid kasutusel on meetodeis
- Kirjeldage andmebaasis asuvad tabelid ja nende omadused lahti
Esitusena pane link oma wordpressi saidile, kus kõik näha on.
Mis on projekti eesmärk? Projekti eesmärk oli õppida kasutama ja looma ASP.NET MVC Razor’iga veebilehti. Tegime veebilehe meie tulevasele koolile kasutades seda.
Koodinäited:
public class DelinquentsController : Controller
{
private readonly SchoolContext _context;
public DelinquentsController(SchoolContext context)
{
_context = context;
}
public IActionResult Index()
{
var delinquents = _context.Delinquents.ToList();
return View(delinquents);
}
[HttpGet]
public IActionResult Create()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Delinquents delinquent)
{
if (ModelState.IsValid)
{
_context.Add(delinquent);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return RedirectToAction("Index");
}
[HttpGet]
public async Task<IActionResult> Edit(int? id)
{
var delinquents = await _context.Delinquents.FindAsync(id);
return View(delinquents);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, Delinquents delinquent)
{
if (id != delinquent.ID)
{
return NotFound();
}
if (ModelState.IsValid)
{
_context.Delinquents.Update(delinquent);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(delinquent);
}
[HttpGet]
public async Task<IActionResult> Details (int? id)
{
var delinquent = await _context.Delinquents.FindAsync(id);
return View(delinquent);
}
[HttpGet]
public async Task<IActionResult> Delete (int? id)
{
if (id == null)
{
return NotFound();
}
var delinquent = await _context.Delinquents.FirstOrDefaultAsync(m => m.ID == id);
if (delinquent == null)
{
return NotFound();
}
return View(delinquent);
}
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var delinquent = await _context.Delinquents.FindAsync(id);
_context.Delinquents.Remove(delinquent);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
}
@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.DepartmentWorkers)</td>
<td>@Html.DisplayFor(modelItem => department.Location)</td>
<td>@Html.DisplayFor(modelItem => department.CriminalCases)</td>
<td>
@* /* muuda */ *@
@* /* vaata */ *@
@* /* Vaata Adminit */ *@
@* /* Kustuta */ *@
<a asp-action="Edit" asp-route-id="@department.DepartmentID" class="btn btn-dark">Muuda</a>
<a asp-action="Delete" asp-route-id="@department.DepartmentID" class="btn btn-danger">Eemalda</a>
<a asp-action="Details" asp-route-id="@department.DepartmentID" class="btn btn-dark">Vaata</a>
</td>
</tr>
}
public enum Violations
{
Assault, Theft, Vandalism, Skipping, Bullying
}
public class Delinquents
{
[Key]
public int ID { get; set; }
public string Name { get; set; }
public DateTime EventDate { get; set; }
public bool isStudent { get; set; }
public string PunishmentType { get; set; }
public int PunishmentLength { get; set; }
public string Description { get; set; }
}
Kuidas töötab see projekt?
Projekt siis töötab põhinedes Model-View-Controller struktuuril kus kasutaja näeb “View” ehk vaadet. Vajutades midagi, saadab see päringu “Controller”isse mis omakorda saadab päringu “Model”isse ja võimalik et muudab midagi “Model”is. “Model” on andmebaas, dünaamiline andmestruktuur. “Model” uuendab vaadet ning kasutaja näeb vastust sellele mis ta tegi.
Kuidas me kasutame projektis MVC struktuuri?
Igal osal (nt, Korrarikkujad, osakonnad, õpilased) on oma vaadete kaust kus on 5 peamist vaadet: Create, Delete, Details, Edit, Index. Index on see peamine vaade. Kui sa pealehel vajutad mingi osa peale näiteks osakonnad, siis see näitab sulle Index vaadet esimesena. Selles Index vaates on nupp Create, Delete, Details, Edit jaoks. Create nupp laseb sul uue osakonna teha, sinna sa sisestad vajalikud andmed ja vajutad loo osakond. Luuakse uus osakond ja sa oled tagasi Index vaates. Vajutades Details, näitab see sulle selle osakonna andmeid detailsemalt kui see mida sa Indexis näed. Edit nupp laseb sul muuta andmeid mida andsid osakonnale, näiteks sa võid muuta osakonna nime. Delete nupp laseb sul kustutada osakonna ära.
Igas kontrolleris on meetodid, et need vaated töötaksid.
public async Task<IActionResult> Index()
{
var schoolContext = _context.Departments.Include(d => d.Administrator);
return View(await schoolContext.ToListAsync());
}
See meetod kutsub Index vaate välja
[HttpGet]
public IActionResult Create()
{
ViewData["Create"] = "Create";
ViewData["InstructorID"] = new SelectList(_context.Instructors, "ID", "FullName");
return View("Create");
}
See meetod kutsub Create vaate välja
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Department department)
{
if (ModelState.IsValid)
{
_context.Add(department);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
ViewData["InstructorID"] = new SelectList(_context.Instructors, "Id", "FullName", department.InstructorID);
return RedirectToAction("Index");
}
See Create meetod vaatab kas ModelState on õige, kui on siis lisab uue osakonna, ootab et see salvestaks ära ja siis viib sind tagasi Index vaatesse.
[HttpGet]
public async Task<IActionResult> Delete (int? id)
{
if (id == null)
{
return NotFound();
}
var department = await _context.Departments
.Include(d => d.Administrator)
.FirstOrDefaultAsync(m => m.DepartmentID == id);
if (department == null)
{
return NotFound();
}
ViewData["Delete"] = "Delete";
return View(department);
}
See Delete meetod vaatab kas ID on null, kui on siis viskab sulle errori et sa ei saa seda kustutada. Kui ID ei ole null siis ta viib sind Delete vaatesse. Kui osakond on null siis ta viskab sulle samuti errori.
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(Department department)
{
if (await _context.Departments.AnyAsync(m => m.DepartmentID == department.DepartmentID))
{
_context.Departments.Remove(department);
await _context.SaveChangesAsync();
}
return RedirectToAction("Index");
}
See Delete meetod kustutab osakonna ja viib sind tagasi Index vaatesse kui tingimus on täidetud.
[HttpGet]
public async Task<IActionResult> Details(int? id)
{
ViewData["Delete"] = "Details";
var department = await _context.Departments.FirstOrDefaultAsync(d => d.DepartmentID == id);
return View(nameof(Delete), department);
}
Details meetod kuvab sulle detailid/details vaate. return statementis on Delete selle pärast et meil on kaks vaadet ühes failis nii et meetod peab oskama kutsuda õiget vaadet sellest failist.
[HttpGet]
public async Task<IActionResult> Edit(int? id)
{
ViewData["Create"] = "Edit";
var department = await _context.Departments.FindAsync(id);
return View(nameof(Create), department);
}
Edit meetod ootab ID’d osakonnast et teada millist muuta, ja return statementis on Create selle pärast et Create ja Edit on samas failis, meetod peab teadma kumba vaadet kutsuda failist.
[HttpPost, ActionName("Edit")]
public async Task<IActionResult> Edit([Bind("Name, Budget, StartDate, RowVersion, InstructorID, DepartmentStatus, DepartmentWorkers, Location, CriminalCases")] Department department)
{
if (ModelState.IsValid)
{
_context.Departments.Update(department);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(department);
}
Edit meetod mis vaatab kas ModelState on õige ja siis ta uuendab seda osakonda nende andmetega mida muutsid, ootab et salvestada seda ja siis viskab sind tagasi Index vaatesse
Millised LINQ meetodid on kasutusel? Meetodis oleme kasutanud FirstOrDefaultAsync ja AnyAsync LINQ meetodeid.
Millised tabelid on andmebaasis ning mis on nende omadused?
Andmebaasis on tabelid kursuse, nende kodutööde, korrarikkujate, osakondade, kursusele/kooli kandideerijatele, õpetajatele, õpetajate kodutöödele ja õpilastele.
Kõikidel on Primary Key olemas ja osadel on ka foreign key’d olemas.
