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:
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