Laden...

MVC Daten gehen über mehrere Daten verloren

Erstellt von joshua vor einem Jahr Letzter Beitrag vor einem Jahr 936 Views
J
joshua Themenstarter:in
24 Beiträge seit 2010
vor einem Jahr
MVC Daten gehen über mehrere Daten verloren

Hallo Zusammen

ich habe folgendes Problem und finde keine Lösung:
Ich habe ein View1->Formular wo man diverse Werte über Inputfelder eintragen kann, daneben benötige ich auch Adressdaten. Via Button öffnet sich ein neuer View2 wo ich die Adresse suche (DB) welche ich benötige->Übergabe IdAdresse an ersten View1 übergeben. View1 Abfrage über IdAdresse. Das funktioniert alles. Habe mit ViewBad oder DataTemp kann ich die Felder auch übergeben.
Das Problem ist, dass in View1 die vorherig ausgefüllten Werte von den Inputfeldern gelöscht werden. Vom View2 gehe ich mit dem Befehlt return RedirectToAction("View1") zurück zu View1
Vielen Dank für eure Hilfe

16.807 Beiträge seit 2008
vor einem Jahr

Vorweg: hab mal den Titel so angepasst, dass das Thema ersichtlich ist.

Zum Problem: Basics zu HTTP, es ist zustandslos.
HTTP kennt keine Formulare, sondern nur Requests - und jeder Request ist zustandslos.
Das bedeutet, dass Request A einfach Request B und C nicht kennt und umgekehrt.

Bedeutet auch: alles, was mit Request A geschickt wird, musst Du Dir merken, damit Du es im Request B und C erneut verwenden kannst.
Entweder auf der Server-Seite oder Du schickst es in der Antwort an den Client zurück, dass dieser es in einem weiteren Request erneut schicken kann (zB Hidden Fields in Formularen).

Letzteres ist i.d.R. die bessere Variante, weil es auch besser skaliert und User mehrere Formulare parallel verarbeiten können, ohne, dass die Daten auf der Server-seite kollidieren.
Des weiteren weiß man auf Serverseite niemals, ob ein weiterer Requests kommt, sodass das entsprechend auch die Ressourcen belastet.
ViewBag / ViewData sind dafür keine geeigneten Ablagen.

J
joshua Themenstarter:in
24 Beiträge seit 2010
vor einem Jahr

Vorweg vielen Dank für die Hilfe.
ist mir nicht ganz klar wie ich z.B Hidden Fields gebrauchen soll.
Das Eingabeformular hat unter anderem folgende Felder wo Werte eingegeben oder ausgewählt wurden, bevor die Adresse ausgewählt wird:
===========================================================================


              <div class="form-group col-md-3">
                    <label asp-for="idGAuswahlfeld" class="control-label"></label>
                    <select asp-for="idGemeinde" asp-items="@ViewBag.TypeDropDownAuswahlfeld" class="form-control">
                        <option selected>---Ausgewählte Gemeinde ---</option>
                    </select>
                    <span asp-validation-for="idAuswahlfeld" class="text-danger"></span>
                </div>
                <div class="form-group col col-md-6">
                    <label asp-for="beschreibungOrt" class="control-label"></label>
                    <input asp-for="beschreibungOrt" class="form-control" />
                    <span asp-validation-for="beschreibungOrt" class="text-danger"></span>
                </div>
                <div class="form-group col-md-3">
                    <label asp-for="datumBestellung" class="control-label"></label>
                    <input asp-for="datumBestellung" class="form-control" />
                    <span asp-validation-for="datumBestellung" class="text-danger"></span>
                </div>

=============================================================================

16.807 Beiträge seit 2008
vor einem Jahr

Hidden Fields sind einfach Formular-Einträge, die nicht sichtbar sind. Sie werden aber trotzdem mit den Werten übertragen wie zB auch Textfields.
HTML input type="hidden"

Auch in diesem Fall sind typisierte Modelle die bessere Variante als der ViewBag, allein weil Du hier Compiler Support hast (was Du beim untypisierten ViewBag nicht hast). Wird zB im MVC Music Store Tutorial erklärt.
Part 3: Views and ViewModels

PS: die ganzen asp- Tags sind viel Black Magic. Funktioniert alles nur, wenn man sich 100% dran hält (was nicht immer einfach ist).
Aber asp-Tags/TagHelper decken nicht alle Use Cases ab und Du musst trotzdem manuelles HTML/HTTP beherrschen 😉
Wird man daher in größeren Anwendungen kaum finden, weil sie relativ unpraktikabel sind (und unnötig Performance kosten). Das aber nur als Hinweis, dass Du Dich nicht wunderst.

M
368 Beiträge seit 2006
vor einem Jahr

Hidden Fields gebrauchen soll.

Damit könnte man -auch in Kombination mit z.B. Captchas oder Rechenaufgaben- ungewünschte Fremdeingaben (z.B. via Selenium, PlayWright,..) verhindern.

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉

J
joshua Themenstarter:in
24 Beiträge seit 2010
vor einem Jahr

danke für eure Unterstützung

Das heisst also, wenn ich eine View1 habe mit den Feldern die ich ausfülle wie zum Beispiel
Auswahl Art der Ware, Anzahl Bestellungen, Bestelldatum etc. und ich dann die Adresse über View2a auswähle -> IdAdresse wieder zu View1 gehe, dann muss ich die
Felder von View1:Auswahl Art der Ware, Anzahl Bestellungen, Bestelldatum etc. alle noch als Hidden Fields definieren?

16.807 Beiträge seit 2008
vor einem Jahr

Ja, Du musst Dir alles merken, wenn Du über mehrere Seiten hinweg etwas aufbauen willst, weil HTTP bzw. Webanwendungen zustandslos sind.
Das heisst jede Auswahl, jede Eingabe, etc etc.

Einfacher ist das bei Client-seitigen Anwendungen, die einfach verschiedene Views anzeigen, bis sie am Schluss dann einen großen Request absenden.
Bei rein Server-seitigen Anwendungen muss man das halt immer wieder hin und her schicken.

F
10.010 Beiträge seit 2004
vor einem Jahr

Oder man benutzt Blazor ( Server side ) und muss sich da nicht mehr drum kümmern ( naja fast nicht ).

J
joshua Themenstarter:in
24 Beiträge seit 2010
vor einem Jahr
Hidden Fields

Hallo
ich habe mir das mit Hidden Field angeschaut und sehe aber nicht den Verwendungszweck für mein Problem.
Vielleicht habe ich auch mein Problem nicht verständlich ausgedrückt:

  • ich habe einen View1 wo ich meine Felder definiert habe in diesem sind die Input asp-for Felder definiert wo ich die Daten eingebe, wie zum Beispiel Datum, Material (Auswahlfeld) etc.
    daneben gibt es auch Felder für die Adresseingabe. Da ich eine Adressdatenbank habe, wo 90% der Adressen vorhanden sind, möchte ich über einen weiteren View2 die Adressen anzeigen
    lassen und über eine Suchfeld kann dann die gefundene Adresse ausgewählt werden. Übern den Adresskey wähle ich die Adresse aus und übergebe diese an View1.

Und hier beginnt das Problem, beim übergeben der Adresse mit

  return RedirectToAction("index");

werden die vorgängig eingegebenen Felder gelöscht (ist mir auch klar gemäss eurer Beschreibung).
Nur ist mir nicht klar wie ich das Problem mit Hidden Fields lösen kann.
Vielen Dank für die Hilfe