Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
MVC Daten gehen über mehrere Daten verloren
joshua
myCSharp.de - Member



Dabei seit:
Beiträge: 24

Themenstarter:

MVC Daten gehen über mehrere Daten verloren

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von joshua am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.928

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
joshua
myCSharp.de - Member



Dabei seit:
Beiträge: 24

Themenstarter:

beantworten | zitieren | melden

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>


=============================================================================
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.928

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
M.L.
myCSharp.de - Member



Dabei seit:
Beiträge: 301

beantworten | zitieren | melden

Zitat
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 ;-)
private Nachricht | Beiträge des Benutzers
joshua
myCSharp.de - Member



Dabei seit:
Beiträge: 24

Themenstarter:

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.928

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.977

beantworten | zitieren | melden

Oder man benutzt Blazor ( Server side ) und muss sich da nicht mehr drum kümmern ( naja fast nicht ).
private Nachricht | Beiträge des Benutzers
joshua
myCSharp.de - Member



Dabei seit:
Beiträge: 24

Themenstarter:

Hidden Fields

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers