Õpilased

Student kasutas 5 View’d – Create, Delete, Details, Edit, Index

Õpilased andmemudel:

namespace TallinnaRakenduslikKolllež.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 string? Address { get; set; }
        public string? GroupName { get; set; }
        public string? Email { get; set; }
    }
}

Index – Pealeht, näitab tähtsamaid andmeid rivistuses ja kuvab funktsioonide nupud

@model IEnumerable<TallinnaRakenduslikKolllež.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.GroupName)
			</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.GroupName)
				</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>

Create – võimaldab lisada õpilasi

@model TallinnaRakenduslikKolllež.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="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="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="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="GroupName" class="control-label"></label>
				<input asp-for="GroupName" class="form-control" />
				<span asp-validation-for="GroupName" 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>

Edit – võimaldab muuta Õpilase andmeid

@model TallinnaRakenduslikKolllež.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="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="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="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="GroupName" class="control-label"></label>
				<input asp-for="GroupName" class="form-control" />
				<span asp-validation-for="GroupName" 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>

Delete – võimaldab kustutada Õpilase andmebaasist

@model TallinnaRakenduslikKolllež.Models.Student

@{
	ViewData["Title"] = "Kustuta õpilane;";
}

&lt;h1>Kustuta õpilane&lt;/h1>
&lt;h3>
	Kas oled kindel, et tahad õpilast @Model.FirstName @Model.LastName eemaldada?
&lt;/h3>
&lt;div>
	&lt;h4>Õpilane @Model.FirstName @Model.LastName &lt;/h4>
	&lt;hr/>
	&lt;dl class="row">
		&lt;dt class="col-sm-2">@Html.DisplayNameFor(model => model.FirstName)&lt;/dt>
		&lt;dd class="col-sm-10">@Html.DisplayFor(model => model.FirstName)&lt;/dd>
	&lt;/dl>
	&lt;dl class="row">
		&lt;dt class="col-sm-2">@Html.DisplayNameFor(model => model.LastName)&lt;/dt>
		&lt;dd class="col-sm-10">@Html.DisplayFor(model => model.LastName)&lt;/dd>
	&lt;/dl>
	&lt;dl class="row">
		&lt;dt class="col-sm-2">@Html.DisplayNameFor(model => model.EnrollmentDate)&lt;/dt>
		&lt;dd class="col-sm-10">@Html.DisplayFor(model => model.EnrollmentDate)&lt;/dd>
	&lt;/dl>
	&lt;dl class="row">
		&lt;dt class="col-sm-2">@Html.DisplayNameFor(model => model.GroupName)&lt;/dt>
		&lt;dd class="col-sm-10">@Html.DisplayFor(model => model.GroupName)&lt;/dd>
	&lt;/dl>

	@if (Model.Enrollments != null)
	{
		foreach (var courseEnrollment in Model.Enrollments)
		{
			&lt;dl class="row">
				&lt;dd class="col-sm-10">@(courseEnrollment)&lt;/dd>
			&lt;/dl>

		}
	}
	@if (Model.Address != null)
	{
		@Model.Address
	}
	@if (Model.Email != null)
	{
		@Model.Email
	}
	@if (Model.GroupName != null)
	{
		@Model.GroupName
	}

&lt;/div>
&lt;form asp-action="Delete">
	&lt;input type="hidden" asp-for="Id"/>
	&lt;input type="submit" value="Kustua õpilane" class="btn btn-danger"/> | &lt;a asp-action="Index">Tühista&lt;/a>
&lt;/form>

Details – võimaldab vaatata Õpilase kõiki andmeid

@model TallinnaRakenduslikKolllež.Models.Student

@{
	ViewData["Title"] = "Õpilase vaade";
}

<h1>Õpilase Vaade</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.DisplayFor(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.DisplayFor(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.DisplayFor(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.DisplayFor(Model => Model.GroupName)</dt>
		<dd class="col-sm-10">@Html.DisplayFor(Model => Model.GroupName)</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.Address != null)
	{
		@Model.Address
	}
	@if (Model.Email != null)
	{
		@Model.Email
	}
	@if (Model.GroupName != null)
	{
		@Model.GroupName
	}

</div>

Controller – kasutatakse backend-is, siin käib kõik kalkulatsioonid ja funktsiooni tööd – kuvad õpilaste nimekirja, Create, Edit, View, Delete funktsionaalsuse

Dependency Injectioni tehakse sellele autamaatselt

    private readonly SchoolContext _context;
    public StudentsController(SchoolContext context)
    {
        _context = context;
    }

Index – pärib kõik õpilased andmebaasist ja kuvab.

    [HttpGet]
    public async Task<IActionResult> Index()
    {
        return View(await _context.Students.ToListAsync());
    }

HTTPGET Create – kuvab uue tühja Create vaate.

    [HttpGet]
    public IActionResult Create()
    {
        return View();
    }

HTTPPOST Create – kontrollib, et andmetüübid on korrektsed, lisatakse andmebaasi ning saadab Index vaatesse

 [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("Id, LastName, FirstName, EnrollmentDate")] Student student)
        {
            if (ModelState.IsValid)
            {
                _context.Students.Add(student);
                await _context.SaveChangesAsync();
                return RedirectToAction("Index");
                // return RedirectToAction(nameof(Index))
            }
            return View(student);
        }

HTTPGET Details – pärib õpilase andmed ID järgi ja kuvab kõik andmed. kui ei leia kuvab Not Found.

        [HttpGet]
        public async Task<IActionResult> Details(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);
        }

HTTPGET Delete – kuvab Delete vaate ID järgi.

        [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 Delete – Kustutatakse õpilane ID järgi andmebaasist ja saadetakse Indexisse.

        [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");
        }

HTTPGET Edit – kuvatakse Edit view.


        [HttpGet, ActionName("Edit")]
        public async Task<IActionResult> Edit(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 Edit – valideerib andmed, salvestab need andmebaasi ja saadab indexi.

        [HttpPost, ActionName("Edit")]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> EditConfirmed([Bind("Id, LastName, FirstName, EnrollmentDate")] Student student)
        {
            if (ModelState.IsValid)
            {
                _context.Students.Update(student);
                await _context.SaveChangesAsync();
                return RedirectToAction("Index");
                // return RedirectToAction(nameof(Index))
            }
            return View(student);
        }