Mise en place de la structure définitive du CRUD et modification de la page principale avec les datas
This commit is contained in:
62
Controllers/PagesController.cs
Normal file
62
Controllers/PagesController.cs
Normal file
@@ -0,0 +1,62 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.ViewEngines;
|
||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||
using Microsoft.AspNetCore.Mvc.ModelBinding;
|
||||
using System.IO;
|
||||
|
||||
namespace administration.Controllers
|
||||
{
|
||||
public class PagesController : Controller
|
||||
{
|
||||
private readonly ICompositeViewEngine _viewEngine;
|
||||
private readonly ITempDataProvider _tempDataProvider;
|
||||
|
||||
public PagesController(ICompositeViewEngine viewEngine, ITempDataProvider tempDataProvider)
|
||||
{
|
||||
_viewEngine = viewEngine;
|
||||
_tempDataProvider = tempDataProvider;
|
||||
}
|
||||
|
||||
[HttpGet("/pages/{folder}/{page}")]
|
||||
public async Task<IActionResult> Render(string folder, string page)
|
||||
{
|
||||
var allowedFolders = new[] { "Charts", "Components", "Connections", "Home", "Tables", "Utilities" };
|
||||
|
||||
var realFolder = allowedFolders.FirstOrDefault(f => string.Equals(f, folder, StringComparison.OrdinalIgnoreCase));
|
||||
if (realFolder == null)
|
||||
return Content("Ce dossier n'est pas autorisé.", "text/plain; charset=utf-8");
|
||||
|
||||
// Trouver la vraie casse du fichier sur disque
|
||||
var folderPath = Path.Combine(Directory.GetCurrentDirectory(), "Views", realFolder);
|
||||
var cshtmlFile = Directory.GetFiles(folderPath, "*.cshtml")
|
||||
.FirstOrDefault(f => string.Equals(Path.GetFileNameWithoutExtension(f), page, StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
if (cshtmlFile == null)
|
||||
return NotFound($"La vue ~/Views/{realFolder}/{page}.cshtml n'existe pas physiquement.");
|
||||
|
||||
var razorViewPath = $"~/Views/{realFolder}/{Path.GetFileName(cshtmlFile)}";
|
||||
var result = _viewEngine.GetView(null, razorViewPath, true);
|
||||
|
||||
if (!result.Success)
|
||||
return NotFound($"Vue Razor non trouvée : {razorViewPath}");
|
||||
|
||||
|
||||
var viewData = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary());
|
||||
var tempData = new TempDataDictionary(HttpContext, _tempDataProvider);
|
||||
|
||||
using var sw = new StringWriter();
|
||||
var context = new ViewContext(
|
||||
ControllerContext,
|
||||
result.View,
|
||||
viewData,
|
||||
tempData,
|
||||
sw,
|
||||
new HtmlHelperOptions()
|
||||
);
|
||||
|
||||
await result.View.RenderAsync(context);
|
||||
return Content(sw.ToString(), "text/html");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user