Webframeworkk/ASP.NET Core/Crud Opertations: Unterschied zwischen den Versionen

Aus Dokument
Zur Navigation springen Zur Suche springen
imported>Import
Version 198
 
Die Seite wurde neu angelegt: „Willkommen zu diesem umfassenden Tutorial zur Implementierung von '''CRUD-Operationen (Create, Read, Update, Delete)''' in ASP.NET Core MVC. Dieser Leitfaden konzentriert sich auf den Aufbau robuster, wartbarer und effizienter Webanwendungen. ---- == 🏗️ 1. Controller: Das Herzstück der Anwendung == Controller verwalten eingehende HTTP-Anfragen, interagieren mit Services und geben die entsprechenden Views zurück. === 🔍 Read (Die Index-Aktion)…“
 
Zeile 4: Zeile 4:
Willkommen zu diesem umfassenden Tutorial zur Implementierung von '''CRUD-Operationen (Create, Read, Update, Delete)''' in ASP.NET Core MVC. Dieser Leitfaden konzentriert sich auf den Aufbau robuster, wartbarer und effizienter Webanwendungen.
Willkommen zu diesem umfassenden Tutorial zur Implementierung von '''CRUD-Operationen (Create, Read, Update, Delete)''' in ASP.NET Core MVC. Dieser Leitfaden konzentriert sich auf den Aufbau robuster, wartbarer und effizienter Webanwendungen.


 
----
-----


== 🏗️ 1. Controller: Das Herzstück der Anwendung ==
== 🏗️ 1. Controller: Das Herzstück der Anwendung ==
Zeile 12: Zeile 11:


=== 🔍 Read (Die Index-Aktion) ===
=== 🔍 Read (Die Index-Aktion) ===
Die <code>Index</code>-Aktion ist für das Abrufen und Anzeigen von Daten verantwortlich.
Die <code>Index</code>-Aktion ist für das Abrufen und Anzeigen von Daten verantwortlich.
* '''Aufgaben:''' Daten von der Service-Ebene abrufen, Sortierung/Filterung anwenden und die Daten in ein View-Modell verpacken.
* '''Aufgaben:''' Daten von der Service-Ebene abrufen, Sortierung/Filterung anwenden und die Daten in ein View-Modell verpacken.
* '''Rückgabetyp:''' <code>IActionResult</code> (normalerweise ein <code>ViewResult</code>).
* '''Rückgabetyp:''' <code>IActionResult</code> (normalerweise ein <code>ViewResult</code>).


=== ➕ Create (Die Create-Aktionen) ===
=== ➕ Create (Die Create-Aktionen) ===
Die Create-Operation erfordert in der Regel zwei Aktionsmethoden:
Die Create-Operation erfordert in der Regel zwei Aktionsmethoden:
 
# '''HttpGet <code>Create()</code>:''' Gibt die "Create"-View zurück, die das leere Formular enthält.
# '''HttpGet <code>Create()</code>:''' Gibt die “Create”-View zurück, die das leere Formular enthält.
# '''HttpPost <code>Create(Model model)</code>:'''
# '''HttpPost <code>Create(Model model)</code>:'''
** Empfängt Formulardaten über das '''Model Binding'''.
 
* ** Empfängt Formulardaten über das '''Model Binding'''.
** Validiert die Eingabe mit <code>ModelState.IsValid</code>.
** Validiert die Eingabe mit <code>ModelState.IsValid</code>.
** Speichert die Entität über die Service-Ebene.
** Speichert die Entität über die Service-Ebene.
** Leitet nach Erfolg zur <code>Index</code>-Aktion weiter (um doppelte Formularübermittlungen zu vermeiden).
** Leitet nach Erfolg zur <code>Index</code>-Aktion weiter (um doppelte Formularübermittlungen zu vermeiden).


 
----
-----


== 🖼️ 2. Views: Gestaltung der Benutzeroberfläche ==
== 🖼️ 2. Views: Gestaltung der Benutzeroberfläche ==
Zeile 38: Zeile 31:


=== 📋 Index-View (Read) ===
=== 📋 Index-View (Read) ===
* Zeigt eine Liste oder Tabelle von Elementen an.
* Zeigt eine Liste oder Tabelle von Elementen an.
* Enthält oft Benutzeroberflächen für '''Sortierung''' und '''Suche'''.
* Enthält oft Benutzeroberflächen für '''Sortierung''' und '''Suche'''.
Zeile 44: Zeile 36:


=== 📝 Create-View (Create) ===
=== 📝 Create-View (Create) ===
 
* Erstellt ein Formular mithilfe von '''Tag Helpern''' (<code>&lt;form&gt;</code>, <code>&lt;input&gt;</code>, <code>&lt;span asp-validation-for="..."&gt;</code>).
* Erstellt ein Formular mithilfe von '''Tag Helpern''' (<code>&lt;form&gt;</code>, <code>&lt;input&gt;</code>, <code>&lt;span asp-validation-for=&quot;...&quot;&gt;</code>).
* Bietet sofortiges Feedback durch Validierungsattribute.
* Bietet sofortiges Feedback durch Validierungsattribute.
* Bindet an ein spezifisches Request-Modell (z. B. <code>PersonAddRequest</code>).
* Bindet an ein spezifisches Request-Modell (z. B. <code>PersonAddRequest</code>).


----


-----
== 🔄 3. Fortgeschrittene Funktionen: Sortieren & Suchen ==
 
== 🔄 3. Fortgeschrittene Funktionen: Sortieren &amp; Suchen ==


Verbessern Sie die Benutzererfahrung, indem Sie das Finden und Organisieren von Daten erleichtern.
Verbessern Sie die Benutzererfahrung, indem Sie das Finden und Organisieren von Daten erleichtern.


=== 📊 Sortierung ===
=== 📊 Sortierung ===
* Verwenden Sie '''Query-String-Parameter''' (z. B. <code>?sortBy=Name&amp;sortOrder=DESC</code>), um die Logik auf dem Server zu steuern.
* Verwenden Sie '''Query-String-Parameter''' (z. B. <code>?sortBy=Name&amp;sortOrder=DESC</code>), um die Logik auf dem Server zu steuern.
* Übergeben Sie den aktuellen Sortierstatus via <code>ViewBag</code> oder ein spezielles View-Modell.
* Übergeben Sie den aktuellen Sortierstatus via <code>ViewBag</code> oder ein spezielles View-Modell.
Zeile 63: Zeile 52:


=== 🔎 Suche ===
=== 🔎 Suche ===
* Implementieren Sie ein Suchformular mit Feldern wie <code>searchBy</code> (Dropdown) und <code>searchString</code> (Texteingabe).
* Implementieren Sie ein Suchformular mit Feldern wie <code>searchBy</code> (Dropdown) und <code>searchString</code> (Texteingabe).
* Übermitteln Sie diese Parameter an die <code>Index</code>-Aktion.
* Übermitteln Sie diese Parameter an die <code>Index</code>-Aktion.
* Filtern Sie die Daten auf Service- oder Datenbankebene, um die Performance zu optimieren.
* Filtern Sie die Daten auf Service- oder Datenbankebene, um die Performance zu optimieren.


----


-----
== 💡 4. Best Practices & Stolperfallen ==
 
== 💡 4. Best Practices &amp; Stolperfallen ==
 
=== ✅ Die “Do’s” ===


=== ✅ Die "Do's" ===
* '''Stark typisierte Views:''' Bevorzugen Sie diese immer gegenüber <code>ViewBag</code> für Typsicherheit.
* '''Stark typisierte Views:''' Bevorzugen Sie diese immer gegenüber <code>ViewBag</code> für Typsicherheit.
* '''Trennung der Zuständigkeiten (Separation of Concerns):''' Halten Sie Geschäftslogik in Services, nicht in Controllern oder Views.
* '''Trennung der Zuständigkeiten (Separation of Concerns):''' Halten Sie Geschäftslogik in Services, nicht in Controllern oder Views.
Zeile 81: Zeile 67:
* '''Sicherheit:''' Validieren und bereinigen Sie Benutzereingaben immer und verwenden Sie DTOs (Data Transfer Objects).
* '''Sicherheit:''' Validieren und bereinigen Sie Benutzereingaben immer und verwenden Sie DTOs (Data Transfer Objects).


=== ❌ Die “Don’ts” ===
=== ❌ Die "Don'ts" ===
 
* '''Komplexe Logik in Views:''' Vermeiden Sie <code>if/else</code>-Blöcke oder schwere Berechnungen in <code>.cshtml</code>-Dateien.
* '''Komplexe Logik in Views:''' Vermeiden Sie <code>if/else</code>-Blöcke oder schwere Berechnungen in <code>.cshtml</code>-Dateien.
* '''Hardcodierte Strings:''' Verwenden Sie Konstanten oder Enums für Spaltennamen und Sortieroptionen.
* '''Hardcodierte Strings:''' Verwenden Sie Konstanten oder Enums für Spaltennamen und Sortieroptionen.
* '''Übermäßige Nutzung von ViewBag:''' Es fehlt die Prüfung zur Kompilierzeit, was zu instabilem Code führt.
* '''Übermäßige Nutzung von ViewBag:''' Es fehlt die Prüfung zur Kompilierzeit, was zu instabilem Code führt.


 
----
-----


== 🛣️ 5. Routing in ASP.NET Core ==
== 🛣️ 5. Routing in ASP.NET Core ==
Zeile 95: Zeile 79:


=== 🏷️ Attribut-Routing ===
=== 🏷️ Attribut-Routing ===
Verwenden Sie das <code>[Route]</code>-Attribut für präzise Kontrolle.
Verwenden Sie das <code>[Route]</code>-Attribut für präzise Kontrolle.
 
* '''Controller-Ebene:''' <code>[Route("[controller]")]</code> fungiert als Präfix.
* '''Controller-Ebene:''' <code>[Route(&quot;[controller]&quot;)]</code> fungiert als Präfix.
* '''Aktions-Ebene:''' <code>[Route("[action]")]</code> definiert den spezifischen Endpunkt.
* '''Aktions-Ebene:''' <code>[Route(&quot;[action]&quot;)]</code> definiert den spezifischen Endpunkt.


=== 🎫 Route-Tokens ===
=== 🎫 Route-Tokens ===
Tokens wie <code>[controller]</code> und <code>[action]</code> ermöglichen die Erstellung dynamischer Routen, die sich automatisch aktualisieren, wenn Sie Ihre Klassen oder Methoden umbenennen.
Tokens wie <code>[controller]</code> und <code>[action]</code> ermöglichen die Erstellung dynamischer Routen, die sich automatisch aktualisieren, wenn Sie Ihre Klassen oder Methoden umbenennen.


 
----
-----


== 🎓 6. Fokusbereiche für Vorstellungsgespräche ==
== 🎓 6. Fokusbereiche für Vorstellungsgespräche ==


Wenn Sie sich auf ein technisches Interview vorbereiten, sollten Sie folgende Themen beherrschen:
Wenn Sie sich auf ein technisches Interview vorbereiten, sollten Sie folgende Themen beherrschen:
* '''MVC-Architektur:''' Wie die drei Komponenten interagieren.
* '''MVC-Architektur:''' Wie die drei Komponenten interagieren.
* '''Model Binding:''' Wie Daten von einem Formular zu einem Aktionsparameter gelangen.
* '''Model Binding:''' Wie Daten von einem Formular zu einem Aktionsparameter gelangen.
Zeile 117: Zeile 96:
* '''Dependency Injection:''' Wie Services den Controllern bereitgestellt werden.
* '''Dependency Injection:''' Wie Services den Controllern bereitgestellt werden.


 
----
-----


== 🏁 Fazit ==
== 🏁 Fazit ==
Zeile 124: Zeile 102:
(Schlussabschnitt ggf. ergänzen)
(Schlussabschnitt ggf. ergänzen)


 
---
-----


----
----
''Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).''
''Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).''

Aktuelle Version vom 24. Februar 2026, 22:22 Uhr

Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).


Willkommen zu diesem umfassenden Tutorial zur Implementierung von CRUD-Operationen (Create, Read, Update, Delete) in ASP.NET Core MVC. Dieser Leitfaden konzentriert sich auf den Aufbau robuster, wartbarer und effizienter Webanwendungen.


🏗️ 1. Controller: Das Herzstück der Anwendung

Controller verwalten eingehende HTTP-Anfragen, interagieren mit Services und geben die entsprechenden Views zurück.

🔍 Read (Die Index-Aktion)

Die Index-Aktion ist für das Abrufen und Anzeigen von Daten verantwortlich.

  • Aufgaben: Daten von der Service-Ebene abrufen, Sortierung/Filterung anwenden und die Daten in ein View-Modell verpacken.
  • Rückgabetyp: IActionResult (normalerweise ein ViewResult).

➕ Create (Die Create-Aktionen)

Die Create-Operation erfordert in der Regel zwei Aktionsmethoden:

  1. HttpGet Create(): Gibt die "Create"-View zurück, die das leere Formular enthält.
  2. HttpPost Create(Model model):
    • Empfängt Formulardaten über das Model Binding.
    • Validiert die Eingabe mit ModelState.IsValid.
    • Speichert die Entität über die Service-Ebene.
    • Leitet nach Erfolg zur Index-Aktion weiter (um doppelte Formularübermittlungen zu vermeiden).

🖼️ 2. Views: Gestaltung der Benutzeroberfläche

Views sind für die Präsentationslogik verantwortlich. Verwenden Sie stark typisierte Views (Strongly Typed Views) für eine bessere Wartbarkeit und IntelliSense-Unterstützung.

📋 Index-View (Read)

  • Zeigt eine Liste oder Tabelle von Elementen an.
  • Enthält oft Benutzeroberflächen für Sortierung und Suche.
  • Kann Partial Views nutzen, um den Code sauber zu halten (z. B. eine Vorlage für jede Zeile).

📝 Create-View (Create)

  • Erstellt ein Formular mithilfe von Tag Helpern (<form>, <input>, <span asp-validation-for="...">).
  • Bietet sofortiges Feedback durch Validierungsattribute.
  • Bindet an ein spezifisches Request-Modell (z. B. PersonAddRequest).

🔄 3. Fortgeschrittene Funktionen: Sortieren & Suchen

Verbessern Sie die Benutzererfahrung, indem Sie das Finden und Organisieren von Daten erleichtern.

📊 Sortierung

  • Verwenden Sie Query-String-Parameter (z. B. ?sortBy=Name&sortOrder=DESC), um die Logik auf dem Server zu steuern.
  • Übergeben Sie den aktuellen Sortierstatus via ViewBag oder ein spezielles View-Modell.
  • Erstellen Sie wiederverwendbare Komponenten (wie eine Partial View für Spaltenüberschriften) für Sortierlinks.

🔎 Suche

  • Implementieren Sie ein Suchformular mit Feldern wie searchBy (Dropdown) und searchString (Texteingabe).
  • Übermitteln Sie diese Parameter an die Index-Aktion.
  • Filtern Sie die Daten auf Service- oder Datenbankebene, um die Performance zu optimieren.

💡 4. Best Practices & Stolperfallen

✅ Die "Do's"

  • Stark typisierte Views: Bevorzugen Sie diese immer gegenüber ViewBag für Typsicherheit.
  • Trennung der Zuständigkeiten (Separation of Concerns): Halten Sie Geschäftslogik in Services, nicht in Controllern oder Views.
  • Validierung: Verwenden Sie Data Annotations ([Required], [StringLength]) und prüfen Sie ModelState.IsValid.
  • Async/Await: Verwenden Sie asynchrone Operationen für alle I/O-Aufgaben (Datenbank- oder API-Aufrufe).
  • Sicherheit: Validieren und bereinigen Sie Benutzereingaben immer und verwenden Sie DTOs (Data Transfer Objects).

❌ Die "Don'ts"

  • Komplexe Logik in Views: Vermeiden Sie if/else-Blöcke oder schwere Berechnungen in .cshtml-Dateien.
  • Hardcodierte Strings: Verwenden Sie Konstanten oder Enums für Spaltennamen und Sortieroptionen.
  • Übermäßige Nutzung von ViewBag: Es fehlt die Prüfung zur Kompilierzeit, was zu instabilem Code führt.

🛣️ 5. Routing in ASP.NET Core

Routing ordnet URLs den Controller-Aktionen zu.

🏷️ Attribut-Routing

Verwenden Sie das [Route]-Attribut für präzise Kontrolle.

  • Controller-Ebene: [Route("[controller]")] fungiert als Präfix.
  • Aktions-Ebene: [Route("[action]")] definiert den spezifischen Endpunkt.

🎫 Route-Tokens

Tokens wie [controller] und [action] ermöglichen die Erstellung dynamischer Routen, die sich automatisch aktualisieren, wenn Sie Ihre Klassen oder Methoden umbenennen.


🎓 6. Fokusbereiche für Vorstellungsgespräche

Wenn Sie sich auf ein technisches Interview vorbereiten, sollten Sie folgende Themen beherrschen:

  • MVC-Architektur: Wie die drei Komponenten interagieren.
  • Model Binding: Wie Daten von einem Formular zu einem Aktionsparameter gelangen.
  • Post-Redirect-Get-Pattern: Warum wir nach einem erfolgreichen POST-Request weiterleiten.
  • Dependency Injection: Wie Services den Controllern bereitgestellt werden.

🏁 Fazit

(Schlussabschnitt ggf. ergänzen)

---


Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).