Controller
SchoolContext _context tells the Controller and View what the database looks like and all the information inside it. Index lets us view all the Instructors information in general using the ToListAsync() method which puts all the books into a table. Create first gives us the Create view and then once the information is given, it checks that the model is correct and if so, adds it to the database and takes you back to the Index. It also uses SaveChangesAsync to save the information Delete deletes the given selection after checking that it exists. It first uses FirstorDefaultAsync which returns the first element of the array asynchronously. And uses the Lambda method to briefly show the anonymous method. And then saves it to the database after deleting the selected object. Details lets us view more detailed information about the given object. It also uses the FirstorDefaultAsync and Lambda methods. Edit lets us modify the given object. It uses the FirstorDefaultAsync and Lambda methods. It also has a post method which then saves everything that was changed. QuickEdit also works the same way as Edit.
using TallinnaRakenduslikKolledzKaur.Data;
using Microsoft.AspNetCore.Mvc;
using TallinnaRakenduslikKolledzKaur.Models;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using System.Reflection;
namespace TallinnaRakenduslikKolledzKaur.Controllers
{
public class InstructorsController : Controller
{
private readonly SchoolContext _context;
public InstructorsController(SchoolContext context)
{
_context = context;
}
public async Task<IActionResult> Index(int? id, int? courseId)
{
var vm = new InstructorIndexData();
vm.Instructors = await _context.Instructors
.Include(i => i.OfficeAssignment)
.Include(i => i.CourseAssignments)
.ToListAsync();
return View(vm);
}
[HttpGet]
public IActionResult Create()
{
var instructor = new Instructor();
instructor.CourseAssignments = new List<CourseAssignment>();
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Instructor instructor, string selectedCourses)
{
if (selectedCourses == null)
{
instructor.CourseAssignments = new List<CourseAssignment>();
if (selectedCourses != null)
{
foreach (var course in selectedCourses)
{
var courseToAdd = new CourseAssignment
{
InstructorId = instructor.Id,
CourseID = course
};
instructor.CourseAssignments.Add(courseToAdd);
}
}
}
ModelState.Remove("selectedCourses");
if (ModelState.IsValid)
{
_context.Add(instructor);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
//PopulateAssignedCourseData(instructor);
return View(instructor);
}
private void PopulateAssignedCourseData(Instructor instructor)
{
var allCourses = _context.Courses; // leiame kõik kursused
var instructorCourses = new HashSet<int>(instructor.CourseAssignments.Select(c => c.CourseID));
// valime kursused kus courseId on õpetajal olemas
var vm = new List<AssignedCourseData>();
foreach (var course in allCourses)
{
vm.Add(new AssignedCourseData
{
CourseID = course.CourseId,
Title = course.Title,
Assigned = instructorCourses.Contains(course.CourseId)
});
}
ViewData["Courses"] = vm;
}
[HttpGet]
public async Task<IActionResult> Delete(int? id, bool? saveChangesError = false)
{
if (id == null)
{
return NotFound();
}
var deletableInstructor = await _context.Instructors
.FirstOrDefaultAsync(s => s.Id == id);
if (deletableInstructor == null)
{
return NotFound();
}
return View(deletableInstructor);
}
[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");
}
[HttpGet]
public async Task<IActionResult> Details(int? Id)
{
if (Id == null)
{
return NotFound();
}
var instructor = await _context.Instructors.FirstOrDefaultAsync(m => m.Id == Id);
if (instructor == null)
{
return NotFound();
}
return View(instructor);
}
[HttpGet]
public async Task<IActionResult> Edit(int? Id)
{
if (Id == null)
{
return NotFound();
}
var instructor = await _context.Instructors.FirstOrDefaultAsync(m => m.Id == Id);
if (instructor == null)
{
return NotFound();
}
_context.Instructors.Update(instructor);
return View(instructor);
}
[HttpPost, ActionName("Edit")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> EditConfirmed([Bind("Id,LastName,FirstName,HireDate,CourseAssignments,OfficeAssignment,VacationDays,Comments,BirthDate,Status")] Instructor instructor)
{
_context.Instructors.Update(instructor);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
public async Task<IActionResult> Quickedit(int? Id)
{
if (Id == null)
{
return NotFound();
}
var instructor = await _context.Instructors.FirstOrDefaultAsync(m => m.Id == Id);
if (instructor == null)
{
return NotFound();
}
_context.Instructors.Update(instructor);
return View(instructor);
}
[HttpPost, ActionName("Quickedit")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> QuickeditConfirmed([Bind("Id,LastName,FirstName,HireDate,CourseAssignments,OfficeAssignment,VacationDays,Comments,BirthDate,Status")] Instructor instructor)
{
_context.Instructors.Update(instructor);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
}
}
Mudel
using System.ComponentModel.DataAnnotations;
namespace TallinnaRakenduslikKolledzKaur.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? Staplers { get; set; }
public string? Accomplishments { get; set; }
public int? WastedHours { get; set; }
}
}
View
Create
@model TallinnaRakenduslikKolledzKaur.Models.Instructor
@{ViewData["Title"] = "Lisa õpetaja";}
<h1>Lisa Õpetaja</h1>
<h4></h4>
<hr/>
<div class="row">
<div class="col-md-8">
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="LastName"></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"></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="HireDate"></label>
<input asp-for="HireDate" class="form-control" />
<span asp-validation-for="HireDate" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="OfficeAssignment"></label>
<input asp-for="OfficeAssignment" class="form-control" />
<span asp-validation-for="OfficeAssignment" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Comments"></label>
<input asp-for="Comments" class="form-control" />
<span asp-validation-for="Comments" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="BirthDate"></label>
<input asp-for="BirthDate" class="form-control" />
<span asp-validation-for="BirthDate" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="VacationDays"></label>
<input asp-for="VacationDays" class="form-control" />
<span asp-validation-for="VacationDays" class="text-danger"></span>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<table>
<tr>
@{
int count = 0;
List<TallinnaRakenduslikKolledzKaur.Models.AssignedCourseData> assignedCourses = ViewBag.Courses;
if (assignedCourses != null)
{
foreach (var course in assignedCourses)
{
if (count++ % 3 == 0)
{
@:</tr><tr>
}
@:<td>
<input
type="checkbox"
name="selectedCourses"
value="@course.CourseID"
@(Html.Raw(course.Assigned ? "checked=\"checked\"" : ""))
/>
}
}
else
{
@:Kursuseid ei leitud
}
}
</tr>
</table>
</div>
</div>
<div>
<input type="submit" value="Sisesta" class="btn btn-primary"/>
</div>
<div>
<a asp-action="Index">Tühista Lisamine</a>
</div>
</form>
</div>
</div>
Delete
@model TallinnaRakenduslikKolledzKaur.Models.Instructor
@{
ViewData["Title"] = "Kustuta Õpetaja";
}
<h1>Kustuta Õpetaja</h1>
<h3>
Kas oled kindel et tahad kustudada @Html.DisplayFor(Model => Model.FullName)
</h3>
<div>
<h4>Õpetaja</h4>
<hr />
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.LastName)</dt>
<dt class="col-sm-2">@Html.DisplayFor(Model => Model.LastName)</dt>
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.FirstName)</dt>
<dt class="col-sm-2">@Html.DisplayFor(Model => Model.FirstName)</dt>
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.HireDate)</dt>
<dt class="col-sm-2">@Html.DisplayFor(Model => Model.HireDate)</dt>
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.CourseAssignments)</dt>
<dt class="col-sm-2">@Html.DisplayFor(Model => Model.CourseAssignments)</dt>
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.OfficeAssignment)</dt>
<dt class="col-sm-2">@Html.DisplayFor(Model => Model.OfficeAssignment)</dt>
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.VacationDays)</dt>
<dt class="col-sm-2">@Html.DisplayFor(Model => Model.VacationDays)</dt>
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.Comments)</dt>
<dt class="col-sm-2">@Html.DisplayFor(Model => Model.Comments)</dt>
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.BirthDate)</dt>
<dt class="col-sm-2">@Html.DisplayFor(Model => Model.BirthDate)</dt>
<form asp-action="Delete">
<input type="hidden" asp-for="Id" />
<input type="submit" value="Kustuta Õpetaja" class="btn btn-danger" /> | <a asp-action="Index">Tühista</a>
</form>
</div>
Details
@model TallinnaRakenduslikKolledzKaur.Models.Instructor
@{
ViewData["Title"] = "Viewing õpetaja";
}
<div>
<h4>Õpetaja @Model.FullName</h4>
<hr />
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.FullName)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.FullName)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.HireDate)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.HireDate)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.CourseAssignments)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.CourseAssignments)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.OfficeAssignment)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.OfficeAssignment)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.VacationDays)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.VacationDays)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.Comments)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.Comments)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.BirthDate)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.BirthDate)</dd>
</dl>
<td>
<a asp-action="Edit" asp-route-id="@Model.Id">Muuda</a>
</td>
</div>
<form asp-action="Tagasi">
<input type="hidden" asp-for="Id" />
<a asp-action="Index">Tagasi</a>
</form>
Edit
@model TallinnaRakenduslikKolledzKaur.Models.Instructor
@{
ViewData["Title"] = "Muuda õpetaja";
}
<h1>Muuda õpetaja</h1>
<hr />
<div class="row">
<div class="col-md-4">
<form asp-action="Edit">
<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="HireDate" class="control-label"></label>
<input asp-for="HireDate" class="form-control" />
<span asp-validation-for="HireDate" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="CourseAssignments" class="control-label"></label>
<input asp-for="CourseAssignments" class="form-control" />
<span asp-validation-for="CourseAssignments" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="OfficeAssignment" class="control-label"></label>
<input asp-for="OfficeAssignment" class="form-control" />
<span asp-validation-for="OfficeAssignment" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="VacationDays" class="control-label"></label>
<input asp-for="VacationDays" class="form-control" />
<span asp-validation-for="VacationDays" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Comments" class="control-label"></label>
<input asp-for="Comments" class="form-control" />
<span asp-validation-for="Comments" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="BirthDate" class="control-label"></label>
<input asp-for="BirthDate" class="form-control" />
<span asp-validation-for="BirthDate" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Status" class="control-label"></label>
<input asp-for="Status" class="form-control" />
<span asp-validation-for="Status" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Edit" class="btn btn-primary" />
</div>
</form>
</div>
</div>
<div>
<a asp-action="Index">Mine tagasi loendisse</a>
</div>
Index
@model TallinnaRakenduslikKolledzKaur.Models.InstructorIndexData
@{
ViewData["Title"] = "Õpetajad";
}
<h2>Õpetajad</h2>
<p>
<a asp-action="Create">Lisa õpetaja</a>
</p>
<table class="table">
<thead>
<tr>
<th>Perekonnanimi</th>
<th>Eesnimi</th>
<th>Töölevõtukuupäev</th>
<th>Kabinet</th>
<th>Vacation Days</th>
<th>Comments</th>
<th>BirthDate</th>
<th>Staatus</th>
<th>Tööriistad</th>
</tr>
</thead>
<tbody>
@foreach (var instructor in Model.Instructors)
{
string selectedRow = "";
if (instructor.Id ==(int?)ViewData["InstructorID"])
{
selectedRow = "table-success";
}
<tr class="@selectedRow">
<td>@Html.DisplayFor(modelItem => instructor.LastName)</td>
<td>@Html.DisplayFor(modelItem => instructor.FirstName)</td>
<td>@Html.DisplayFor(modelItem => instructor.HireDate)</td>
<td>
@if (instructor.OfficeAssignment != null)
{
@instructor.OfficeAssignment.Location
}
</td>
<td>@Html.DisplayFor(modelItem => instructor.VacationDays)</td>
<td>
@foreach (var course in instructor.CourseAssignments)
{
@course.Course.CourseId @: @course.Course.Title <br/>
}
</td>
<td>@Html.DisplayFor(modelItem => instructor.BirthDate)</td>
<td>@Html.DisplayFor(modelItem => instructor.Status)</td>
<td>
<a asp-action="Quickedit" asp-route-id="@instructor.Id">Kiirtegevus</a>
<a asp-action="Details" asp-route-id="@instructor.Id">Vaata</a>
<a asp-action="Delete" asp-route-id="@instructor.Id">Kustuta</a>
</td>
</tr>
}
</tbody>
</table>
Quickedit
@model TallinnaRakenduslikKolledzKaur.Models.Instructor
@{
ViewData["Title"] = "Muuda õpetaja";
}
<h1>Muuda õpetaja</h1>
<hr />
<div class="row">
<div class="col-md-4">
<form asp-action="Quickedit">
<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="OfficeAssignment" class="control-label"></label>
<input asp-for="OfficeAssignment" class="form-control" />
<span asp-validation-for="OfficeAssignment" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="VacationDays" class="control-label"></label>
<input asp-for="VacationDays" class="form-control" />
<span asp-validation-for="VacationDays" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Comments" class="control-label"></label>
<input asp-for="Comments" class="form-control" />
<span asp-validation-for="Comments" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Status" class="control-label"></label>
<input asp-for="Status" class="" />
<span asp-validation-for="Status" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Edit" class="btn btn-primary" />
</div>
</form>
</div>
</div>
<div>
<a asp-action="Index">Mine tagasi loendisse</a>
</div>