Przekazywanie danych z kontrolera do formularza w widoku - ASP .NET CORE

0

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

1

Przeciez widok zawsze koresponduje z kontrolerem i nie potrzeba modelu zeby zarzadzac danymi miedzy widokiem a kontrolerem, dopiero gdy dane chcesz zapisac lub pobrac

1

Zawsze możesz użyć TempData. Jest ona dostępna do wywołania kolejnej akcji kontrolera. Ja tego używam do wysyłania właśnie krótkich komunikatów po jakiejś interakcji
Tutaj masz przykład https://www.tutorialsteacher.com/mvc/tempdata-in-asp.net-mvc

0

Dzięki wszystkim za odpowiedź. Poradziłem sobie z wykorzystaniem ViewBaga i TempData

1 użytkowników online, w tym zalogowanych: 0, gości: 1