Laden...

Listen abspeichern mit ASP

Erstellt von Markus1510 vor 2 Jahren Letzter Beitrag vor 2 Jahren 361 Views
M
Markus1510 Themenstarter:in
7 Beiträge seit 2021
vor 2 Jahren
Listen abspeichern mit ASP

Hallo,
ich habe ein kleines Problem wo ich nicht weiter komme.
Ich habe 2 Datalist erstellt.
Wenn ich ein Eintrag in der 1.Datalist machen wird dieser in die DB geschrieben, mache ich aber einen nur in die2 dann wird dieser nicht eingetragen.
Was könnte hier der Fehler sein??

Code View:


<form asp-controller="Lagemeldungen" asp-action="CreatEditLage">

    <div class="Card">
        <div class=" card-header">
            <h3>Lagemeldungen</h3>
        </div>

        <div class="card-body">
            <div class="row">
                <input asp-for="Lagemeldungen" type="text" class="form-control" list="LageFeuer" placeholder="Lagemeldung Feuer">
                <datalist id="LageFeuer">
                    <option>f1 (Kleinbrand/Container)</option>
                </datalist>
            </div>
            <br />
            <div class="row">
                <input asp-for="Lagemeldungen" type="text" class="form-control" list="LageTHL" placeholder="Lagemeldung THL">
                <datalist id="LageTHL">
                    <option>f1 (Kleinbrand/Container)</option>
                </datalist>
            </div>
        </div>


        <div class="card-footer">
            <button class="btn btn-primary" type="submit">Speichern</button>
        </div>
    </div>
</form>

Code Controller:


public class LagemeldungenController : Controller
    {

        private readonly ApplicationDbContext _context;

        public LagemeldungenController(ApplicationDbContext context)
        {
            _context = context;
        }

        public IActionResult Index()
        {
            return View();
        }

        public IActionResult CreateEditLagemeldungen(int id)
        {
            return View();
               
        }

        public IActionResult CreatEditLage(Lagemeldung lagemeldung)
        {
            // Daten werden hier in Datenbank geschrieben

            if (lagemeldung.Id == 0)
            {
                // Wenn wir es nicht bearbeiten soll ein neues hinzugefügt werden!!!!!
                _context.Lagemeldungs.Add(lagemeldung);  //Was in die Datenbank hinzufügen
            }
            else
            {
                var lagefromDb= _context.Lagemeldungs.SingleOrDefault(x => x.Id == lagemeldung.Id);

                if(lagefromDb == null)
                {
                    return NotFound();
                }

                lagefromDb.Uhrzeit = lagemeldung.Uhrzeit;
                lagefromDb.Absender = lagemeldung.Absender;
                lagefromDb.Empfänger = lagemeldung.Empfänger;
                lagefromDb.Lagemeldungen = lagemeldung.Lagemeldungen;
            }
           
            _context.SaveChanges();  //Die Daten wurden in die Datenbank gespeichert
            return RedirectToAction("CreateEditLagemeldungen");
        }

Grüße Markus

16.835 Beiträge seit 2008
vor 2 Jahren

Das betrifft sowohl ASP wie auch ganz einfach HTML bzw. HTTP: Willst Du mehrere Einträge erzeugen und via HTTP übergeben, müssen diese a) indexiert werden und b) muss das Deine Methode auch akzeptieren.
Funktionsweise siehe zB https://www.c-sharpcorner.com/UploadFile/pmfawas/Asp-Net-mvc-how-to-post-a-collection/ oder andere Treffer mit Google Suche nach "asp core post collectionm"
Grund ist, dass Werte in HTTP auf Key Value basieren und Du eben pro Key nur ein Wert übergeben kannst, daher kommt auch nur ein Wert an (siehst Du auch in den Developer Tools Deines Browsers Deiner Wahl).

Tipp:

  • "Lagemeldungen" riecht nach Business- oder Daten-Modell. Verwendet extra Modelle für Deine Views und für Deine Actions, zB "ResponseModels" und "RequestModels"
  • Füge ResponseModels Validierungen hinzu, dann musst Du das nicht alles von Hand ausprogrammieren. Beliebtesteste Variante: https://github.com/FluentValidation/FluentValidation
  • Weder Datenbank-Logik noch Business Logik gehört in den Controller; machst Du das so weiter wirst Du sehr viel doppelten Code habe. Auch hier gilt [Artikel] Drei-Schichten-Architektur
  • Mach besser kein Routing über Actions (siehe mein Kommentar und die empfohlene Variante hier => WebAPI POST CreatedAtAction Fehlermeldung)