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
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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>
=============================================================================
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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 😉
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?
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Oder man benutzt Blazor ( Server side ) und muss sich da nicht mehr drum kümmern ( naja fast nicht ).
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:
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