Cześć, naszła mnie dzisiaj taka myśl, a za razem problem, który chciałbym rozwiązać. Napisałem formularz bez wykorzystania modelu i udało mi się przekazać dane z widoku do kontrolera. Po przetworzeniu formularza, w razie błędnej walidacji chciałbym, aby w polu formularza pojawiła się wprowadzona przez użytkownika wartość. Najprostszym rozwiązaniem byłoby wykorzystanie modelu danych, ale ciekawi mnie, czy jest możliwość przekazania danych z powrotem z kontrolera do widoku. Ciekawi mnie to, ponieważ chciałbym za niedługo zając się dynamicznymi formularzami.
Widok:
@{
ViewData["Title"] = "Instalowanie systemu";
Layout = "~/Views/Shared/_LoginLayout.cshtml";
}
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, AuthoringTagHelpers
<div class="container bg-success">
<div class="row">
<div class="col">
<h1 class="text-center text-white pt-2 pb-2">Instalowanie systemu</h1>
<p class="text-white">Krok 1: Konfiguracja połączenia z bazą danych</p>
<form asp-action="Connection" method="post" accept-charset="utf-8">
@if (ViewBag.ConnectionError != true)
{
<div class="mb-3">
<label class="form-label text-white">Połączenie z bazą danych</label>
<input type="text" name="ConnectionInput" class="form-control" />
</div>
}
else
{
<div class="mb-3">
<label class="form-label text-white">Połączenie z bazą danych</label>
<input type="text" name="ConnectionInput" class="form-control is-invalid" value="@ViewBag.ConnectionValue"/>
<div class="invalid-feedback">Wprowadzone połączenie do bazy danych jest nie poprawne!</div>
</div>
}
<div class="row justify-content-end mb-2">
<div class="col-auto">
<button type="submit" class="btn btn-light">Dalej</button>
</div>
</div>
</form>
</div>
</div>
</div>
Kontroler:
using Formsy.Core;
using Microsoft.AspNetCore.Mvc;
namespace Formsy.Controllers
{
public class InstallController : Controller
{
public IActionResult Index()
{
return View();
}
public ActionResult Connection(string ConnectionInput)
{
if (!SqlOperations.IsConnection(ConnectionInput))
{
ViewBag.ConnectionError = true;
ViewBag.ConnectionValue = ConnectionInput;
}
return View("Index", ConnectionInput);
}
}
}
Chodzi mi po głowie wykorzystanie VievBag lub ViewData lub ewentualne przekazanie zmiennej do widoku, ale może istnieje jakieś lepsze rozwiązanie :)