- Modelbinding, Formular binden an Datenmodel, Data
Binding
- Daten anfügen von MVC Model zu SQL Server
Im Eingabeformular wird mit der <form asp-action=Create
> die Daten an die Create-Action des gleichnamigen Controller gesandt.
Dabei werden alle Eingabedaten als form-daten übergeben.
Die Rückgabe Action Create wir als [HttpPost] deklariert,
wodurch alle Formulardaten als http zurückkommen.
Unter ASP.Net Core wird die Rückgabe Action als
asynchroner Task definiert, in welchen als Parameter das zugrundeliegende
Datenmodel eingegeben wird.
Dadurch wird direkt beim Aufruf der Action Create die gesendeten
Formulardaten an das ViewModel übergeben.
Diesen Vorgang nennt man Model Binding oder
Formulardaten an das passende Datenmodel binden.
[HttpPost]
public async Task<IActionResult>
Create(ViewModels.ViewModel_Artikel_New formData)
|
Wenn die Daten zurückgesendet werden, dann werden die
Daten beim Aufruf der Action an das passenden Modell gebunden.
In diesem Fall sind die formData an ein ViewModel_Artikel_new
übergeben.
Ansicht im Breakpoint des Debuggers beim Aufruf der
HttpPost Rückgabe-Action
Datensatz
speichern oder anfügen
Das Datenset ist in diesem Fall aus der Tabelle Artikel
und muss hierzu zuvor von den Formulardaten extrahiert werden
Model__Artikel data = formData.Artikel;
|
Die Daten werden bei MVC dadurch an den Datenserver
übergeben, indem man in der Datenschnittstelle _context per .add(..) ein
Datenset anfügt.
Alle Daten werden von der Anwendung zum Server übernommen,
indem man mit Datencontext.SaveChanges ausführt.
Model__Artikel data = formData.Artikel;
_context.Add(data);
await
_context.SaveChangesAsync();
|
C# Code der Postback Action
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult>
Create(ViewModels.ViewModel_Artikel_New formData)
{
//----<
Create() >----
//*add a
new dataset
if
(ModelState.IsValid)
{
Model__Artikel data = formData.Artikel;
_context.Add(data);
await
_context.SaveChangesAsync();
return
RedirectToAction(nameof(Index));
}
return
RedirectToAction("Index", "Artikel");
//return View(data);
//----</ Create() >----
}
|
Nach der übertragung sind die neuen Daten in der Index Auflistung
sichtbar
Im Eingabeformular wird in form asp-action definiert, zu welcher Action im gleichnamigen
Controller das Formular gesendet werden soll
<form asp-action="Create">
|
Durch klicken auf den Submit Button werden alle
Formular-Daten, welche sich als Input-Felder im Formular befinden, an die
Action übergeben
<input asp-for="Artikel.Artikel" class="form-control" />
..
<select asp-for="Artikel.IDBase_Produktgruppe"..select>
|
Dabei werden die Daten entsprechend des eingestellten Datenmodell
ViewModel aus dem Formular-Header übersandt
@model
ArtikelWeb.ViewModels.ViewModel_Artikel_New
|
Asp.Net
Core MVC
Eingabe-Formular New
@model
ArtikelWeb.ViewModels.ViewModel_Artikel_New
..
<div class="row">
<div class="col-md-4">
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Artikel.Artikel" class="control-label"></label>
<input asp-for="Artikel.Artikel" class="form-control" />
<span asp-validation-for="Artikel.Artikel" class="text-danger"></span>
</div>
..
<div class="form-group">
<label asp-for="Artikel.IDBase_Produktgruppe" class="control-label"></label>
<select asp-for="Artikel.IDBase_Produktgruppe"
class="form-control"
asp-items="@(new
SelectList(Model.Produktgruppen,"IDBase_Produktgruppe", "Produktgruppe"))"></select>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</form>
</div>
</div>
<div>
<a asp-action="Index">Back to List</a>
</div>
|
Video Tutorial
https://www.youtube.com/watch?v=SkB6XGwNsqo