MVC-databaskonstruktion

Log | Files | Refs | README

commit 46a5d21105a6654b2b88414e41437141ae5a6291
parent 116b6235f2abe163d6deed79a14cf1a147da5ca7
Author: William Lindholm <william_lindholm@outlook.com>
Date:   Sat, 14 Oct 2023 18:52:54 +0200

Implemented data handling for modals. Intercepting values in AgentsController.

Diffstat:
MMVC-databaskonstruktion/Controllers/AgentsController.cs | 20+++++++++++++++++---
MMVC-databaskonstruktion/Models/AgentsModel.cs | 12+++++++-----
DMVC-databaskonstruktion/Utils/Modal.cs | 19-------------------
MMVC-databaskonstruktion/Utils/ModalBuilder.cs | 19++++++++++++++++---
AMVC-databaskonstruktion/Utils/ModalContext.cs | 22++++++++++++++++++++++
MMVC-databaskonstruktion/Views/Shared/_ModalPartial.cshtml | 30+++++++++++++++---------------
6 files changed, 77 insertions(+), 45 deletions(-)

diff --git a/MVC-databaskonstruktion/Controllers/AgentsController.cs b/MVC-databaskonstruktion/Controllers/AgentsController.cs @@ -1,9 +1,7 @@ using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.Rendering; using MVC_databaskonstruktion.Models; -using MVC_databaskonstruktion.Utils; using MySql.Data.MySqlClient; -using System.Linq.Expressions; +using System.Diagnostics; namespace MVC_databaskonstruktion.Controllers { @@ -26,6 +24,22 @@ namespace MVC_databaskonstruktion.Controllers return View(); } + public IActionResult Create( + string CodeName, + string FirstName, + string LastName, + int Salary, + bool IsFieldAgent, + bool IsGroupLeader, + bool IsManager) + { + Trace.WriteLine("Running function: Create new Agent." + + "Received parameters: " + + CodeName + FirstName + LastName + Salary + IsFieldAgent + IsGroupLeader + IsManager); + + return RedirectToAction("Index"); + } + public IActionResult FieldAgentDetails(string CodeName) { ViewBag.AgentOperations = _agentsModel.GetAgentOperations(CodeName); diff --git a/MVC-databaskonstruktion/Models/AgentsModel.cs b/MVC-databaskonstruktion/Models/AgentsModel.cs @@ -62,7 +62,7 @@ namespace MVC_databaskonstruktion.Models .Build(); } - public Modal CreateAgentModal() + public ModalContext CreateAgentModal() { var trueFalseList = new List<SelectListItem> { @@ -71,14 +71,16 @@ namespace MVC_databaskonstruktion.Models }; var modalBuilder = new ModalBuilder() - .WithTitle("AddAgent") + .SetTitle("Hire Agent") + .SetIdentifier("AddAgent") + .SetAction("Create", "Agents") .AddInput("CodeName", "CodeName", "normal", "CodeName") .AddInput("FirstName", "FirstName", "normal", "firstname") .AddInput("LastName", "LastName", "normal", "lastname") .AddInput("Salary", "Salary", "normal", "Salary") - .AddInput("IsFieldAgent", "Choose Option", "dropdown", "", trueFalseList) - .AddInput("IsGroupLeader", "Choose Option", "dropdown", "", trueFalseList) - .AddInput("IsManager", "Choose Option", "dropdown", "", trueFalseList); + .AddInput("IsFieldAgent", "IsFieldAgent", "dropdown", "", trueFalseList) + .AddInput("IsGroupLeader", "IsGroupLeader", "dropdown", "", trueFalseList) + .AddInput("IsManager", "IsManager", "dropdown", "", trueFalseList); return modalBuilder.Build(); } diff --git a/MVC-databaskonstruktion/Utils/Modal.cs b/MVC-databaskonstruktion/Utils/Modal.cs @@ -1,19 +0,0 @@ -using Microsoft.AspNetCore.Mvc.Rendering; - -namespace MVC_databaskonstruktion.Utils -{ - public class Modal - { - public string Title { get; set; } - public List<ModalInput> Inputs { get; set; } - } - - public class ModalInput - { - public string Id { get; set; } - public string Label { get; set; } - public string Type { get; set; } - public IEnumerable<SelectListItem> DropdownItems { get; set; } // For dropdown type - public string Placeholder { get; set; } - } -} diff --git a/MVC-databaskonstruktion/Utils/ModalBuilder.cs b/MVC-databaskonstruktion/Utils/ModalBuilder.cs @@ -4,21 +4,34 @@ namespace MVC_databaskonstruktion.Utils { public class ModalBuilder { - private Modal _modal = new Modal { Inputs = new List<ModalInput>() }; + private ModalContext _modal = new ModalContext { Inputs = new List<ModalInput>() }; - public ModalBuilder WithTitle(string title) + public ModalBuilder SetTitle(string title) { _modal.Title = title; return this; } + public ModalBuilder SetIdentifier(string identifier) + { + _modal.Identifier = identifier; + return this; + } + + public ModalBuilder SetAction(string action, string controller) + { + _modal.Action = action; + _modal.Controller = controller; + return this; + } + public ModalBuilder AddInput(string id, string label, string type, string placeholder = "", IEnumerable<SelectListItem> dropdownItems = null) { _modal.Inputs.Add(new ModalInput { Id = id, Label = label, Type = type, Placeholder = placeholder, DropdownItems = dropdownItems }); return this; } - public Modal Build() + public ModalContext Build() { return _modal; } diff --git a/MVC-databaskonstruktion/Utils/ModalContext.cs b/MVC-databaskonstruktion/Utils/ModalContext.cs @@ -0,0 +1,22 @@ +using Microsoft.AspNetCore.Mvc.Rendering; + +namespace MVC_databaskonstruktion.Utils +{ + public class ModalContext + { + public string Title { get; set; } + public string Identifier { get; set; } + public string Action { get; set; } + public string? Controller { get; set; } + public List<ModalInput> Inputs { get; set; } + } + + public class ModalInput + { + public string Id { get; set; } + public string? Label { get; set; } + public string Type { get; set; } + public IEnumerable<SelectListItem>? DropdownItems { get; set; } // For dropdown type + public string ?Placeholder { get; set; } + } +} diff --git a/MVC-databaskonstruktion/Views/Shared/_ModalPartial.cshtml b/MVC-databaskonstruktion/Views/Shared/_ModalPartial.cshtml @@ -1,19 +1,19 @@ @using MVC_databaskonstruktion.Utils -@model Modal +@model ModalContext -<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#@Model.Title"> +<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#@Model.Identifier"> Open @Model.Title </button> -<div class="modal fade" tabindex="-1" role="dialog" id="@Model.Title"> +<div class="modal fade" tabindex="-1" role="dialog" id="@Model.Identifier"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">@Model.Title</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> - <div class="modal-body"> - <form> + <form method="post" action="@Url.Action(Model.Action, Model.Controller)"> + <div class="modal-body"> @foreach (var input in Model.Inputs) { switch (input.Type) @@ -21,13 +21,13 @@ case "datetime": <div class="form-group"> <label for="@input.Id">@input.Label</label> - <input type="date" class="form-control" id="@input.Id" placeholder="@input.Placeholder"> + <input name="@input.Id" type="date" class="form-control" id="@input.Id" placeholder="@input.Placeholder"> </div> break; case "dropdown": <div class="form-group"> <label for="@input.Id">@input.Label</label> - <select class="form-control" id="@input.Id"> + <select name="@input.Id" class="form-control" id="@input.Id"> @foreach (var item in input.DropdownItems) { <option value="@item.Value">@item.Text</option> @@ -41,23 +41,23 @@ case "normal": <div class="form-group"> <label for="@input.Id">@input.Label</label> - <input type="text" class="form-control" id="@input.Id" placeholder="@input.Placeholder"> + <input name="@input.Id" type="text" class="form-control" id="@input.Id" placeholder="@input.Placeholder"> </div> break; case "multiline": <div class="form-group"> <label for="@input.Id">@input.Label</label> - <textarea class="form-control" id="@input.Id" placeholder="@input.Placeholder"></textarea> + <textarea name="@input.Id" class="form-control" id="@input.Id" placeholder="@input.Placeholder"></textarea> </div> break; } } - </form> - </div> - <div class="modal-footer"> - <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> - <button type="button" class="btn btn-primary">Save changes</button> - </div> + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> + <button type="submit" class="btn btn-primary">Save changes</button> + </div> + </form> </div> </div> </div> \ No newline at end of file