C# MVC Razor Kann ich ein Objekt aus einer Form erstellen bevor diese "submitted" wurde?

DeepComputer

Banned
Registriert
Apr. 2020
Beiträge
266
Hey Leute,

das ist der Code
Object:
C#:
    namespace MyBlog.Models {
    public class Eintrag {
        public static List<Eintrag> Eintraege { get; set; } = new();
        public string BlogEintrag { get; set; } = string.Empty;
        public string BlogName { get; set; } = string.Empty;
        public string Date { get; set; } = DateTime.Now.ToShortDateString();
        public string Title { get; set; } = string.Empty;
        public string Untertitle { get; set; } = string.Empty;
    }
}
das ist die View
C#:
public IActionResult Eintrag_schreiben() {
            return View();
        }
        public IActionResult Eintraege_anzeigen(Eintrag e) {
            ViewBag.e = e;
            return View();
        }
HTML:
    @{
    ViewData["Title"] = "Eintrag verfassen";
}

<h1>Eintrag schreiben</h1>
<form action="/Home/Eintraege_anzeigen/" formmethod="get">
    <div class="form-group">
        <label for="BlogName">Blog</label>
        <input class="form-control" type="text" name="BlogName" />
    </div>
    <div class="form-group">
        <label for="Title">Titel</label>
    <input class="form-control" type="text" name="Title" />
    </div>
    <div class="form-group">
        <label for="Untertitle">Untertitel</label>
    <input class="form-control" type="text" name="Untertitle" />
    </div>
    <div class="form-group">
        <label for="eintrag">Eintrag</label>
        <textarea class="form-control" rows="5" name="BlogEintrag" id="eintrag"></textarea>
    </div>
    <input type="submit" value="SEND">
</form>

Ich würde gerne das Objekt in einer Liste einfügen nachdem es ausgefüllt wurde. zB so
C#:
Eintrag.Eintraege.Add(this);
<input type="submit" value="SEND">
oder
C#:
<input type="submit" value="SEND">
 Eintrag.Eintraege.Add(this);
 
Zuletzt bearbeitet:
Wie denkst du dass das funktionieren soll?
Du hast die Form im Browser ausgeführt und wie willst du dann das Ding im c# Backend Code in eine Liste packen ohne dass du es zum Server schickst.

Was du meinst, ist ggf es in der View Action zu machen, dann dort halt weiterarbeiten. Also das Objekt im Post deiner View Action weiter zu nutzen. Das ist dann nicht im View.

Unabhängig davon, ist dein modell mit den statischen properties schon sehr schräg. Keine Ahnung was du damit erreichen willst
 
Zuletzt bearbeitet:
Ich weiß es eben nicht. Ich habs so gelöst:
C#:
@{
    ViewData["Title"] = "Einträge anzeigen";
    Eintrag eintrag = (Eintrag)ViewBag.e;
    Eintrag.Eintraege.Add(eintrag);

    foreach (var item in Eintrag.Eintraege) {
        <h2>@item.BlogName</h2>
        <hr />
        <div>
            <h1>@item.Title</h1>
            <h2>@item.Untertitle</h2>
            <h3>@item.Date</h3>
            <p>@item.BlogEintrag</p>
        </div>      
    }
}
Nur ist das Problem hier, dass jedes mal wenn ich die View aufrufe,
C#:
        public IActionResult Eintraege_anzeigen(Eintrag e) {
            ViewBag.e = e;
            return View();
        }
sie ein (leeres) neues Objekt erstellt. Das würde ich gern vermeiden. Muss doch irgendwie gehen
hier ist das rep https://github.com/OneMillionthUsername/MyBlog
 
Ich würde erstmal empfehlen, den Viewbag los zu werden. Dann zwei Methoden im Controller. Eine für die Anzeige (Get) und eine Post für die neuen Daten. Das hast du ja auch schon.

Ich habe das Gefühl dass du irgendeiner 10 Jahre alten Anleitung für mvc 3.0 oder so folgst.
 
  • Gefällt mir
Reaktionen: Raijin
Irgendwie sieht mir das nach einem XY-Problem aus.

Warum nutzt du nicht die Vorlagen von Visual Studio? Damit bekommst du alle nötigen Hilfestellungen und Ansätze für deinen Anwendungsfall.

Erstelle eine neue View/Ansicht, wähle als Modellklasse dein Model aus (Eintrag) und dann die gewünschte Vorlage.

1663661051904.png


Create
Erstellt eine View, die ein Formular für die Eingabe eines neuen Eintrags enthält. Durch das submit wird die POST-Action im Controller ausgelöst und dort muss der neue Eintrag in die Liste eingetragen werden, zB in eine Datenbank, eine Datei, o.ä.

List
Generiert eine View, die als Übergabe eine List<Eintrag> bekommt und bereits eine daraus erzeugte Tabelle mit Einträgen enthält. In der Controller-Action muss diese Liste zuvor zusammengestellt werden, zB aus der oben erwähnten Datenbank/Datei.


Mit diesen Vorlagen erhälst du alle nötigen Werkzeuge für dein Vorhaben und kannst die Views und den Controller deinen Bedürfnissen anpassen, ohne das Rad neu erfinden zu müssen.



Kleiner Tip noch: Du brauchst in deinem Model keine List<Eintrag>, weil das Model kein geeigneter Speicherort für deine Liste an Einträgen ist. Schlimmstenfalls beißt sich die Katze sogar in den Schwanz, wenn diese Liste den Eintrag selbst enthält, der wiederum eine Liste an Einträgen enthält, in der der Eintrag selbst enthalten ist, der wiederum eine Liste an Einträgen enthält, in der der Eintrag selbst enthalten ist, der wiederum eine Liste an Einträgen enthält, in der der Eintrag selbst enthalten ist ... Ich denke es wird klar was gemeint ist. Ein Objekt der Klasse "Eintrag" enthält nur die eintragspezifischen Daten, den Inhalt des Eintrags, das Datum, etc. Die Liste wird übergeordnet gespeichert (s.o. Datenbank, Datei, etc), nicht aber in dem Objekt selbst.
 
Ja, weil wir das noch nicht gelernt haben. Wir haben leere Razor Dateien und normale Controller gemacht. Ich arbeite gerne voraus und experimentiere und stoss halt schnell mit meinem Wissen an ^^

Ah, das mit der Liste geht so wie du es beschreibst? Ich dachte das "static"keyword verhindert das?

Und ich hab mir gedacht, dass die Einträge extern gespeichert werden müssen, aber nur so zum üben reichts.
 
Anhand der Vorlagen von Visual Studio kannst du dir zumindest mal anschauen wie sowas grundsätzlich funktioniert. Je nach Anwendungsfall ändert man sie natürlich ab. Früher oder später braucht man die Vorlagen nicht mehr, weil man das Konzept verstanden hat und eigenständig anwenden kann - in leeren Views mit leeren Controllern.

Wenn es sich hierbei um Schule/Studium und in irgendeiner Form um Hausaufgaben handelt, dürfen wir gemäß der Boardregeln auch nur eingeschränkt helfen. Allerdings ist in diesem Kontext auch davon auszugehen, dass ihr Lehrmaterial habt, in dem das Zusammenspiel aus Model, View und Controller - kurz: MVC ;) - erklärt wird.
 
Zurück
Oben