Webframeworkk/ASP.NET Core/Crud Opertations: Unterschied zwischen den Versionen
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 | # '''HttpPost <code>Create(Model model)</code>:''' | ||
# '''HttpPost <code>Create(Model model)</code>:''' | ** 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><form></code>, <code><input></code>, <code><span asp-validation-for="..."></code>). | |||
* Erstellt ein Formular mithilfe von '''Tag Helpern''' (<code><form></code>, <code><input></code>, <code><span asp-validation-for= | |||
* 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 & | |||
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&sortOrder=DESC</code>), um die Logik auf dem Server zu steuern. | * Verwenden Sie '''Query-String-Parameter''' (z. B. <code>?sortBy=Name&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 & | |||
=== ✅ 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 | === ❌ 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( | * '''Aktions-Ebene:''' <code>[Route("[action]")]</code> definiert den spezifischen Endpunkt. | ||
* '''Aktions-Ebene:''' <code>[Route( | |||
=== 🎫 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 einViewResult).
➕ Create (Die Create-Aktionen)
Die Create-Operation erfordert in der Regel zwei Aktionsmethoden:
- HttpGet
Create(): Gibt die "Create"-View zurück, die das leere Formular enthält. - 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
ViewBagoder 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) undsearchString(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
ViewBagfü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 SieModelState.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).