Kurs:Asp Net Core Model Binding

Aus ahrensburg.city
Version vom 21. Juni 2025, 01:09 Uhr von Thorsten (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „==Query String== <pre> using Microsoft.AspNetCore.Mvc; namespace start.{{c1::Controllers;}} // Diese Klasse definiert einen Controller für die ASP.NET Core MVC-Anwendung. {{c1::public class HomeController : Controller}} {{c1::{}} // Diese Methode wird aufgerufen, wenn die Route "/start" aufgerufen wird. // Der optionale Parameter "name" kann über die URL als Query-Parameter übergeben werden (z. B. /start?name=Thorsten). {{c1::[Route("sta…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Query String


using Microsoft.AspNetCore.Mvc;

namespace start.{{c1::Controllers;}}

// Diese Klasse definiert einen Controller für die ASP.NET Core MVC-Anwendung.
{{c1::public class HomeController : Controller}}
{{c1::{}}
    // Diese Methode wird aufgerufen, wenn die Route "/start" aufgerufen wird.
    // Der optionale Parameter "name" kann über die URL als Query-Parameter übergeben werden (z. B. /start?name=Thorsten).
    {{c1::[Route("start")]}}
    {{c1::public IActionResult Index(string? name)}} 
    {
        // Überprüft, ob der Parameter "name" nicht null ist.
        {{c1::if (name!=null){}}
            // Gibt den Wert von "name" als Antwort zurück.
            {{c1::return Content($"{name}");}}
        {{c1::} }}
        // Gibt den Standardinhalt keine Inhalt zurück, wenn "name" null ist.
        {{c1::return Content("Keine Inhalt");}}
    {{c1::} }} 
{{c1::} }}

Route Data

using Microsoft.AspNetCore.Mvc;

// Der HomeController erbt von der Basisklasse "Controller", die grundlegende Funktionen für MVC-Controller bereitstellt.
namespace start.{{c1::Controllers;}}

{{c1::public class HomeController : Controller}}
{

    // Die Route-Attributdeklaration definiert eine URL-Route für die Methode "Index".
    // Beispiel: Ein Aufruf von "http://localhost/start/100" würde diese Methode aufrufen,
    // wobei "100" als Parameter "id" übergeben wird.
    {{c1::[Route("/start/{id:int}")] }} // Die Route akzeptiert nur Ganzzahlen (int) als Parameter.
    {{c1::public IActionResult Index(int? id){}}
        // Gibt den Wert des Parameters "id" als Textinhalt zurück.
        // Wenn "id" null ist, wird "null" als String zurückgegeben.
        {{c1::return Content($"{id}");}}
    {{c1::} }}
{{c1::} }}

Die HomeController-Klasse erbt von der Controller-Basis-Klasse

using Microsoft.AspNetCore.Mvc; // Importiert den Namespace für ASP.NET Core MVC-Funktionen

namespace start.{{c1::Controllers;}} // Definiert den Namespace der Anwendung

// Die HomeController-Klasse erbt von der Controller-Basis-Klasse
{{c1::public class HomeController : Controller}}
{{c1::{}}
    // Die Route "/start" wird für diese Methode definiert
    // Beispiel: http://localhost/start?id=100  als Ganzahl
    {{c1::[Route("/start")]}} 
    {{c1::public IActionResult Index([FromQuery] int? id){}} // Nimmt eine optionale Abfrageparameter "id" aus der URL entgegen Ganzahl
        {{c1::return Content($"{id}");}} // Gibt den Wert von "id" als Textinhalt zurück
    {{c1::} }}
{{c1::} }}

Der HomeController stellt einen Endpunkt zur Verfügung, der eine ID aus der URL entgegennimmt

using Microsoft.AspNetCore.Mvc;

namespace start.{{c1::Controllers;}}

// Der HomeController stellt einen Endpunkt zur Verfügung, der eine ID aus der URL entgegennimmt
{{c1::public class HomeController : Controller}}
{{c1::{}}
    // Diese Methode reagiert auf Aufrufe wie /start/123 und gibt die ID als Text zurück(Ganz Zahl)
    {{c1::[Route("/start/{id}")]}}
    {{c1::public IActionResult Index ([FromRoute] int id)}}
    {{c1::{}}
        // Gibt die übergebene ID als Inhalt der HTTP-Antwort zurück
        {{c1::return Content($"{id}");}}
    {{c1::} }}

{{c1::} }}

Person.css

using Microsoft.AspNetCore.Mvc;

namespace start.{{c1::Models;}}

// Diese Klasse repräsentiert eine Person.
{{c1::public class Person}}
{
// Holt den Wert für die Eigenschaft Id aus den Query-Parametern der HTTP-Anfrage.
    {{c1::[FromQuery]}}

     // Die eindeutige ID der Person (Ganzzahl).
    {{c1::public int? Id {get;set;}}}

    // Der Vorname der Person.
    {{c1::public string? Vorname {get;set;}}}

    // Gibt eine Zeichenkette zurück, die die Person anhand von Id und Vorname beschreibt.
    {{c1::public override string ToString()}}
    {{c1::{}}
        {{c1::return}} $"{Id}={Vorname}";
    {{c1::} }}
{{c1::} }}

HomeController

using Microsoft.AspNetCore.Mvc;
using start.Models;
namespace start.{{c1::Controllers;}}

// Dies ist der Controller für die Startseite.
{{c1::public class HomeController : Controller}}
{{c1::{}}

    // Diese Methode wird aufgerufen, wenn die Route "/start?id=1&Vorname=Thorsten aufgerufen wird.
    // Sie nimmt ein Person-Objekt entgegen und gibt dessen Inhalt als Text zurück.
    {{c1::[Route("/start")]}}
    {{c1::public IActionResult Index(Person person)}}
    {{c1::{}}
        {{c1::return Content($"{person}");}}
    {{c1::} }}

{{c1::} }}


Person.cs

using System.ComponentModel.DataAnnotations;

namespace start.{{c1::Models;}}

// Die Klasse `Person` repräsentiert eine Person mit grundlegenden Eigenschaften wie Vorname, Nachname und Telefonnummer.
{{c1::public class Person}}
{
    // Die Eigenschaft `Vorname` ist erforderlich und darf nicht leer sein.
    {{c1::[Required]}}
    {{c1::public string? Vorname {get;set;} }}

    // Die Eigenschaft `Nachname` ist optional, kann aber bei Bedarf ebenfalls als erforderlich markiert werden.
    {{c1::public string? Nachname {get;set;} }}

    // Die Eigenschaft `Telefonnummer` ist optional. Es gibt keine Validierung für das Format der Telefonnummer.
    {{c1::public string? Telefonnummer {get;set;} }}

    // Überschreibt die `ToString`-Methode, um die Eigenschaften der Klasse als lesbaren String zurückzugeben.
       {{c1::public override string ToString()}}
    {{c1::{}}
        {{c1::return}} $"Vorname {Vorname} , Nachname: {Nachname}: Telefonummer: {Telefonnummer} ";
    {{c1::} }}
{{c1::} }}

HomeController


using Microsoft.AspNetCore.Mvc;
using start.{{c1::Models;}}

namespace start.{{c1::Controllers;}}

// Der `HomeController` verwaltet die Routen und Aktionen für die Startseite der Anwendung.
{{c1::public class HomeController : Controller}}
{
    // Die Methode `Index` wird aufgerufen, wenn die Route "/Register" aufgerufen wird.
    // Sie erwartet ein `Person`-Objekt als Parameter, das automatisch durch Model Binding gefüllt wird.
    // Die Methode gibt die Eigenschaften des `Person`-Objekts als Textinhalt zurück.
    {{c1::[Route("Register")]}}
    {{c1::public IActionResult Index(Person person)}}
    {{c1::{}}
        // Gibt die `ToString`-Darstellung des `Person`-Objekts als HTTP-Antwort zurück.
        {{c1::return Content($"{person}");}}
    {{c1::} }}
{{c1::} }}

Der HomeController verarbeitet Anfragen an die Route "Register".

using Microsoft.AspNetCore.Mvc;
using start.{{c1::Models;}}
namespace start.{{c1::Controllers;}}

// Der HomeController verarbeitet Anfragen an die Route "Register".
// Die Methode Index nimmt ein Person-Objekt entgegen und prüft,
// ob das Model gültig ist. Bei ungültigem Model sollte eine Fehlerbehandlung erfolgen.
{{c1::public class HomeController : Controller}}
{

    {{c1::[Route("Register")]}}
    {{public IActionResult Index(Person person)}}
    {
        // Überprüft, ob das Model gültig ist
        {{c1::if (!ModelState.IsValid)}}
        {
            // Hier sollte die Fehlerbehandlung implementiert werden
        }
        // Weitere Verarbeitung, falls das Model gültig ist
    }

}

Dies ist der HomeController, der von der ASP.NET Core Controller-Basis-Klasse erbt


using Microsoft.AspNetCore.Mvc;
using start.{{c1::Models;}}
namespace start.{{c1::Controllers;}}

// Dies ist der HomeController, der von der ASP.NET Core Controller-Basis-Klasse erbt.
{{c1::public class HomeController : Controller}}
{

    // Diese Methode wird aufgerufen, wenn die Route "/Register" aufgerufen wird.
    // Sie erwartet ein Person-Objekt als Parameter.
    {{c1::[Route("Register")]}}
    {{c1::public IActionResult Index(Person person)}}
    {{c1::{}}
        // Überprüft, ob das übergebene Modell gültig ist.
        {{c1::if (!ModelState.IsValid)}}
        {{c1::{}}
            // Falls das Modell ungültig ist, werden alle Fehlermeldungen aus dem ModelState gesammelt.
           {{c1::var errors=ModelState.Values}}
                {{c1::.SelectMany(v => v.Errors)}}
                {{c1::.Select(e => e.ErrorMessage)}}
                {{c1::.ToList();}}
            // Gibt die Fehlermeldungen als Text zurück, getrennt durch Semikolons.
            {{c1::return Content(string.Join("; ", errors));}}
        {{c1::} }}
        // Falls das Modell gültig ist, wird "Richtig" als Text zurückgegeben.
        {{c1::return Content("Richtig");}}
    {{c1::} }}

{{c1::} }}

Person.cs

using System;
using System.ComponentModel.DataAnnotations;

namespace start.{{c1::Models;}}

/// Die Klasse Person repräsentiert eine Person mit Vor- und Nachnamen
{{c1::public class Person}}
{


    /// Gibt den Vornamen der Person zurück oder legt ihn fest.
    /// Das Attribut  stellt sicher, dass dieses Feld nicht leer bleibt.
    {{c1::[Required]}}
    {{c1::public string? Vorname {{c1::{get;set;} }}
    /// Gibt den Nachnamen der Person zurück oder legt ihn fest.
    /// Das Attribut stellt sicher, dass dieses Feld nicht leer bleibt.
    {{c1::[Required]}}
    {{c1::public string? Nachname {get;set;} }}

{{c1::} }}

HomeController

using Microsoft.AspNetCore.Mvc;
using start.Models;

namespace start.Controllers;

/// Der HomeController behandelt die Startseite der Anwendung.
public class HomeController : Controller
{
    
    /// Diese Methode empfängt ein Person-Objekt und gibt entweder die Namen aus
    /// oder bei ungültigem Model die Fehlermeldungen zurück.
    /// Url http://localhost?Vorname=ttt&Nachname=rrr
    {{c1::[Route("/")]}}
    {{c1::public IActionResult Index(Person person)}}
    {{c1::{}}
        {{c1::if (!ModelState.IsValid)}}
        {{c1::{}}
            // Fehler aus dem ModelState extrahieren und als BadRequest zurückgeben
            {{c1::var errors=ModelState.Values}}
            {{c1::.SelectMany(v=>v.Errors)}}
            {{c1::.Select(e=>e.ErrorMessage);}}
            {{c1::return BadRequest(errors);}}
        {{c1::} }}
        // Vor- und Nachname der Person als Text zurückgeben
        {{c1::return Content}}($"{person.Vorname} {person.Nachname}");
    {{c1::} }}
{{c1::} }}


Person.cs


using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace start.{{c1::Models;}}

// Die Klasse "Person" repräsentiert ein Modell für eine Person mit Vor- und Nachnamen.
{{c1::public class Person}}
{
    // Die Eigenschaft "Vorname" ist erforderlich und darf nicht null sein.
    // Der Anzeigename wird als "Vorname" definiert.
    {{c1::[Required(ErrorMessage = "{0} darf nicht leer sein.")]}}
    {{c1::[Display(Name = "Vorname")]}}
    {{c1::public string? Vorname {get;set;} }}

    // Die Eigenschaft "Nachname" ist ebenfalls erforderlich und darf nicht null sein.
    // Der Anzeigename wird als "Nachname" definiert.
    {{c1::[Required(ErrorMessage = "{0} darf nicht leer sein.")]}}
    {{c1::[Display(Name = "Nachname")]}}
    {{c1::public string? Nachname {get;set;} }}
{{c1::} }}


HomeController

using System;
using Microsoft.AspNetCore.Mvc;
using start.{{c1::Models;}}

namespace start.{{c1::Controllers;}}

// Die HomeController-Klasse erbt von der Controller-Basis-Klasse und stellt Endpunkte für die Anwendung bereit.
{{c1::public class HomeController : Controller}}
{

    // Dieser Endpunkt wird über die Route "Register" aufgerufen. Beispiel: https://localhost/Register?Vorname=steffi&Nachname=Timm
    {{c1::[Route("Register")]}}
    {{c1::public IActionResult Index(Person person)}}
    {{c1::{}}
        // Überprüft, ob das übermittelte Modell (Person) gültig ist.
        {{c1::if (!ModelState.IsValid)}}
        {{c1::{}}
            // Falls das Modell ungültig ist, werden alle Validierungsfehler gesammelt.
            {{c1::var errors = ModelState.Values}}
                {{c1::.SelectMany(e => e.Errors)}}
                {{c1::.Select(v => v.ErrorMessage);}}

            // Gibt die Fehler als BadRequest-Antwort zurück.
           

            {{v1::return BadRequest(errors);}}
        {{c1::} }}

        // Falls das Modell gültig ist, wird der Nachname und Vorname der Person zurückgegeben.
        {{c1::return}} Json(person);
    {{c1::} }}
{{c1::} }}

Person.cs

using System;
using System.ComponentModel.DataAnnotations;

namespace start.{{c1::Models;}}

// Die Klasse Person repräsentiert eine Person mit einer Eigenschaft "Vorname".
{{c1::public class Person}}
{{c1::{}}
    // Die Eigenschaft "Vorname" ist erforderlich und unterliegt bestimmten Validierungsregeln.

    //  Stellt sicher, dass die Eigenschaft "Vorname" nicht leer ist.
    // Eine benutzerdefinierte Fehlermeldung wird angezeigt, wenn die Validierung fehlschlägt.
    // Satz soll ausgaben '''Das Feld Vorname darf nicht leer sein''' 
    {{c1::[Required(ErrorMessage="Das Feld {0} darf nicht leer sein.")]}}

    // [Display]: Gibt an, wie die Eigenschaft "Vorname" in der Benutzeroberfläche angezeigt wird.
    {{c1::[Display(Name="Vorname")]}}

    //  Legt die maximale und minimale Länge für die Eigenschaft "Vorname" fest.
    // Die Länge muss zwischen 5 und 40 Zeichen liegen. Eine Fehlermeldung wird definiert.
    // Satz soll ausgaben '''Die Länge von Vornaame muss zwischen 5 und 40 Zeichen liegen
    {{c1::[StringLength(40,MinimumLength=5,ErrorMessage="Die Länge von {0} muss zwischen {2} und {1} Zeichen liegen.")]}}
    {{c1::public string? Vorname {get;set;} }}
{{c1::} }}

HomeController


using System;
using System.ComponentModel.Design;
using Microsoft.AspNetCore.Mvc;
using start.{{c1::Models;}}
namespace start.{{c1::Controllers;}}

// Der HomeController erbt von der Basisklasse Controller, die grundlegende Funktionen für MVC-Controller bereitstellt.
{{c1::public class HomeController : Controller}}
{{c1::{}}
    // Die Index-Methode ist mit der Route "/" verknüpft und wird aufgerufen, wenn die Basis-URL der Anwendung aufgerufen wird.
    {{c1::[Route("/")]}}
    {{c1::public IActionResult Index(Person person)}}
    {{c1::{}}
        // Überprüfung, ob das übergebene Modell (Person) gültig ist.
        {{c1::if (!ModelState.IsValid)}}
        {{c1::{}}
            // Wenn das Modell ungültig ist, werden die Fehler aus dem ModelState extrahiert.
            {{c1::var errors=ModelState.Values}}
            {{c1::.SelectMany(e=>e.Errors)}}
            {{c1::.Select(v=>v.ErrorMessage);}}

            // Rückgabe eines BadRequest (HTTP 400) mit den Fehlern.
            {{c1::return BadRequest(errors);}}
        {{c1::} }}

        // Wenn das Modell gültig ist, wird es als JSON zurückgegeben.
        {{c1::return Json(person);}}
    {{c1::} }}
{{c1::} }}

Person

using System.ComponentModel.DataAnnotations;

namespace start.{{c1::Models;}}

// Die Klasse "Person" repräsentiert ein Modell mit einer Eigenschaft "Alter".
{{c1::public class Person}}
{{c1::{}}
    // "Alter" darf nicht leer sein. Eine Fehlermeldung wird angezeigt, 
    // wenn kein Wert angegeben wird.
    {{c1::[Required(ErrorMessage = "{0} darf nicht leer sein")]}}
    
    // Der Anzeigename für "Alter" wird auf "Alter" gesetzt, was z. B. 
    // in Formularen oder Fehlermeldungen verwendet wird.
    {{c1::[Display(Name="Alter")]}}
    
    // Der Wert von "Alter" muss zwischen 10 und 20 liegen. Andernfalls wird 
    // eine Fehlermeldung mit den entsprechenden Grenzwerten angezeigt.
    // Fehlermeldung: "Alter darf nur mindestens 10 bis 20 sein."
    {{c1::[Range(10, 20, ErrorMessage = "{0} darf nur mindestens {1} bis {2} sein")]}}
    {{c1::public int? Alter {get;set;} }}
{{c1::} }}

HomeController


using System;
using System.ComponentModel.Design;
using Microsoft.AspNetCore.Mvc;
using start.{{c1::Models;}}
namespace start.{{c1::Controllers;}}

// Der HomeController erbt von der Basisklasse Controller, die grundlegende Funktionen für MVC-Controller bereitstellt.
{{c1::public class HomeController : Controller}}
{{c1::{}}
    // Die Index-Methode ist mit der Route "/" verknüpft und wird aufgerufen, wenn die Basis-URL der Anwendung aufgerufen wird.
    {{c1::[Route("/")]}}
    {{c1::public IActionResult Index(Person person)}}
    {{c1::{}}
        // Überprüfung, ob das übergebene Modell (Person) gültig ist.
        {{c1::if (!ModelState.IsValid)}}
        {{c1::{}}
            // Wenn das Modell ungültig ist, werden die Fehler aus dem ModelState extrahiert.
            {{c1::var errors=ModelState.Values}}
            {{c1::.SelectMany(e=>e.Errors)}}
            {{c1::.Select(v=>v.ErrorMessage);}}

            // Rückgabe eines BadRequest (HTTP 400) mit den Fehlern.
            {{c1::return BadRequest(errors);}}
        {{c1::} }}

        // Wenn das Modell gültig ist, wird es als JSON zurückgegeben.
        {{c1::return Json(person);}}
    {{c1::} }}
{{c1::} }}

Person.css


using System.ComponentModel.DataAnnotations;

namespace start.Models;

// Die Klasse Person repräsentiert ein Modell mit Validierungsregeln für die Eigenschaften Passwort und RePasswort.
public class Person
{c1::{}}
    // Die Eigenschaft Passwort ist erforderlich und muss zwischen 8 und 12 Zeichen lang sein.
    // Das Attribut  stellt sicher, dass das Feld nicht leer ist.
    // Das Attribut definiert den Anzeigenamen für die Eigenschaft.
    // Das Attribut  legt die minimale und maximale Länge der Zeichenfolge fest.
    //Fehler Meldung "Passwort darf nicht leer sein.
    {{c1::[Required(ErrorMessage="{0} darf nicht leer sein")}}
    {{c1::[Display(Name="Passwort")]}}
    //Fehler Meldung "Passwort: Die Länge muss zwischen 12 und 8 Zeichen liegen")]
    {{c1::[StringLength(12,MinimumLength=8,ErrorMessage ="{0}: Die Länge muss zwischen {2} und {1} Zeichen liegen")]}}
    {{c1::public string? Passwort{get; set;} }}

    // Die Eigenschaft RePasswort ist ebenfalls erforderlich und muss die gleichen Längenbeschränkungen wie Passwort erfüllen.
    // Zusätzlich wird mit dem Attribut  sichergestellt, dass RePasswort mit Passwort übereinstimmt.
   //Fehler Meldung ""RePasswort darf nicht leer sein."
    {{c1::[Required(ErrorMessage="{0} darf nicht leer sein")]}}
    {{c1::[Display(Name="RePasswort")]}}
    //Fehler Meldung "RePasswort: Die Länge muss zwischen 12 und 8 Zeichen liegen")]
    {{c1::[StringLength(12,MinimumLength=8,ErrorMessage="{0}: Die Länge muss zwischen {2} und {1} Zeichen liegen")]}}
    //Fehler Meldung "RePasswort stimmt nicht mit Passwort überein"
    {{c1::[Compare("Passwort",ErrorMessage="{0} stimmt nicht mit {1} überein")]}}
    {{c1::public string? RePasswort {get;set;} }}
{{c1::} }}

HomeController

using System;
using System.ComponentModel.Design;
using Microsoft.AspNetCore.Mvc;
using start.{{c1::Models;}}
namespace start.{{c1::Controllers;}}

// Der HomeController erbt von der Basisklasse Controller, die grundlegende Funktionen für MVC-Controller bereitstellt.
{{c1::public class HomeController : Controller}}
{{c1::{}}
    // Die Index-Methode ist mit der Route "/" verknüpft und wird aufgerufen, wenn die Basis-URL der Anwendung aufgerufen wird.
    {{c1::[Route("/")]}}
    {{c1::public IActionResult Index(Person person)}}
    {{c1::{}}
        // Überprüfung, ob das übergebene Modell (Person) gültig ist.
        {{c1::if (!ModelState.IsValid)}}
        {{c1::{}}
            // Wenn das Modell ungültig ist, werden die Fehler aus dem ModelState extrahiert.
            {{c1::var errors=ModelState.Values}}
            {{c1::.SelectMany(e=>e.Errors)}}
            {{c1::.Select(v=>v.ErrorMessage);}}

            // Rückgabe eines BadRequest (HTTP 400) mit den Fehlern.
            {{c1::return BadRequest(errors);}}
        {{c1::} }}

        // Wenn das Modell gültig ist, wird es als JSON zurückgegeben.
        {{c1::return Json(person);}}
    {{c1::} }}
{{c1::} }}

Grundklasse für Start-Validierung

using System;
using System.ComponentModel.DataAnnotations;

namespace start.praxis;
// Grundklasse für Start-Validierung
// Diese Klasse kann erweitert werden, um spezifische Validierungslogik zu implementieren
// Grundsätzlich wird die Validierung in der abgeleiteten Klasse implementiert
{{c1::public class Start : ValidationAttribute}} // Automaazisch ersellt, um Validierung zu ermöglichen
{
    {{c1::protected override}} ValidationResult? IsValid(object? value, ValidationContext validationContext)
    {
        return base.IsValid(value, validationContext);
    }
}