none
MVC Hidden Fields vs. Session RRS feed

  • Frage

  • Hallo, 

    ich arbeite seit ca. einem Jahr mit MVC. Ich bevorzuge beim Seitenwechsel gern die HttpPost (also keine Parameter in der URL). Zum Übergeben der Parameter habe ich mir diese in der Session gespeichert und in der neuen View wieder geladen (Ist ja auch bloß ein Dictionary).

    Ein erfahrener MVC-Kollege sagte mir, man solle in diesem Fall aber lieber statt der Session hidden Fields auf der View nehmen. Von hidden Fields halte ich nicht sehr viel, weil man die theoretisch ändern könnte oder einfach, weil es umständlich ist, nformationen in eine View zu rendern, die man an dieser Stelle eigentlich gar nicht braucht.

    Was ist nun hier das "richtige" Vorgehen? Wie macht man es "normalerweise"?


    VB.NET & C#.NET

    Dienstag, 17. Juli 2018 12:54

Antworten

  • Hallo Nico,

    ob man Session verwendet oder nicht, ist Geschmackssache.

    Sensitive Informationen gibt man eh nie an den Client, wenn man nicht 100%ig sicherstellen kann, dass eine mögliche Manipulation serverseitig erkannt werden kann.

    Für normale Parameterübergaben würde ich persönlich aber in der Regel auch normale Formularelemente, wozu dann auch HiddenFields gehören, verwenden. Alles beim Laden in die Session packen und dann beim Postback auf die nächste Seite aus der Session wieder auslesen, ist eigentlich nicht der Sinn der Sache.

    HiddenFields sind aber nicht umständlich zu erzeugen, daher die Frage: Wo siehst Du denn die Umstände?

    Anstelle von vielen HiddenFields kannst Du auch eines nehmen und dort bspw. einen verschlüsselten JSON Inhalt hinterlegen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    • Als Antwort markiert Nico F. _ Dienstag, 17. Juli 2018 13:46
    Dienstag, 17. Juli 2018 13:17
    Moderator

Alle Antworten

  • Hallo Nico,

    ob man Session verwendet oder nicht, ist Geschmackssache.

    Sensitive Informationen gibt man eh nie an den Client, wenn man nicht 100%ig sicherstellen kann, dass eine mögliche Manipulation serverseitig erkannt werden kann.

    Für normale Parameterübergaben würde ich persönlich aber in der Regel auch normale Formularelemente, wozu dann auch HiddenFields gehören, verwenden. Alles beim Laden in die Session packen und dann beim Postback auf die nächste Seite aus der Session wieder auslesen, ist eigentlich nicht der Sinn der Sache.

    HiddenFields sind aber nicht umständlich zu erzeugen, daher die Frage: Wo siehst Du denn die Umstände?

    Anstelle von vielen HiddenFields kannst Du auch eines nehmen und dort bspw. einen verschlüsselten JSON Inhalt hinterlegen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    • Als Antwort markiert Nico F. _ Dienstag, 17. Juli 2018 13:46
    Dienstag, 17. Juli 2018 13:17
    Moderator
  • Hallo Stefan, 

    danke für die fixe Antwort. Ich komme ursprünglich aus der Desktop/WinForms-Welt, und die Funktionsweise von Web-Projekten sind für mich jedesmal erneut ein Graus. Um "normal" auf einer Webseite weiterarbeiten zu können, muss ich im Vorfeld unendlich viele Informationen als hidden field in eine View tun, die ich in dieser View selbst eigentlich gar nicht brauche. Einmal geladene Werte sind bei jedem Klick wieder weg (vielleicht kann man hier umständlich irgendwas mit JavaScript machen, aber das ist auch nicht viel besser).

    Und wenn alle Parameter immer sichtbar sind, dann kann ein Benutzer ja auch immer mal herumprobieren und viele Parameterkonstellationen einfach in der URL ausprobieren. Das finde ich ungünstig.

    Aber Ok, wenn also hidden Fields hier der Weg sind, dann ist das wohl so. Alles klar, danke sehr.

    Viele Grüße

    Nico




    VB.NET & C#.NET

    Dienstag, 17. Juli 2018 13:28
  • Hallo Nico,

    die Webentwicklung ist nunmal etwas komplett anderes als Desktopentwicklung. Der Umstieg von WinForms zu MVC, Razor, WebPages, ... ist aufgrund der vollständig anderen Arbeitsweise sicherlich nicht einfach.

    Du musst dir nur vor Augen halten, dass Webanwendung generell zustandslos ist (Ausnahmen bestätigen natürlich auch hier die Regel aber das ist dann noch ekliger^^).

    D.h. Anfrage an den Server vom Client, Antwort vom Server an den Client, fertig.

    Dazwischen gibt es nichts.

    Dazu kommt: Eine WinForms Anwendung wird in der Regel von einem User bedient, es ist also meist problemlos möglich, mit statischen Objekten und ähnlichem zu arbeiten.

    Bei Webanwendungen geht das eben nicht, da Du mit hunderten oder auch mehr gleichzeitigen Requests arbeiten musst. Dabei wird der gesamte Ablauf (Request Start, Aufruf der Anwendung, Verzweigen in die Zielseite, Laden der Seite, Laden der Parameter und teils automatische Zuweisung zu Variablen, Views, usw. usw.) immer wieder durchgespielt.

    Man setzt also nicht die Anwendung in einen Zustand X (bspw. ein Formular anzeigen) und der Code kann davon ausgehen, dass alles weiter so existiert sondern es wird immer wieder neu aufgebaut.

    Auch der Weg, über APIs mit Javascript zu arbeiten ist ein gängiger Weg, der keineswegs schlecht oder umständlich ist. Das erscheint dir nur noch so, da Du eben noch keine wirkliche Erfahrung mit Webentwicklung hast. Aber das kommt mit der Zeit und dann wird es dir (hoffentlich^^) auch Spaß machen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Dienstag, 17. Juli 2018 14:17
    Moderator
  • Hallo Nico,

    wichtige zustände speichere ich immer in der Datenbank. Zudem sollte man immer versuchen Prozesse über mehrere Views/Controller zu vermeiden. Dann lieber ein großes Formular das abgearbeitet werden kann. Oder aber jeden zustand einzeln in der DB speichern. So hat der User immer die Möglichkeit an einer Stelle weiter zu machen. Zustände außerhalb der DB sind immer gefährlich. 

    Ich nutze auch ab und zu hidden Fields. Aber nur damit die Daten im Model verbleiben und der User keine unnötigen Daten sieht. Jeder Datensatz der an die View geht kann und darf manipuliert werden. Ein versucht mit hidden Fields Datenmanipulationen zu vermeiden geht gar nicht. Da solltest Du dein Konzept wirklich überdenken.


    Gruß Thomas
    13 Millionen Schweine landen jährlich im Müll
    Dev Apps von mir: UWP Segoe MDL2 Assets, UI Strings

    Dienstag, 17. Juli 2018 21:12