478 Stimmen

Was ist ViewModel in MVC?

Ich bin neu in ASP.NET MVC. Ich habe ein Problem mit dem Verständnis der Zweck eines ViewModel.

Was ist ein ViewModel und warum brauchen wir ein ViewModel für eine ASP.NET MVC-Anwendung?

Wenn ich ein gutes Beispiel für die Funktionsweise und eine Erklärung bekomme, wäre das noch besser.

14voto

Sheo Narayan Punkte 1178

Viele große Beispiele, lassen Sie mich klar und deutlich erklären.

ViewModel = Modell, das erstellt wird, um die Ansicht zu bedienen.

ASP.NET MVC-Ansicht kann nicht mehr als ein Modell haben, wenn wir also Eigenschaften von mehr als einem Modell in der Ansicht anzeigen müssen, ist es nicht möglich. ViewModel dient diesem Zweck.

View Model ist eine Modellklasse, die nur die Eigenschaften enthalten kann, die für eine Ansicht erforderlich sind. Es kann auch Eigenschaften von mehr als einer Entität (Tabellen) der Datenbank enthalten. Wie der Name schon sagt, wird dieses Modell speziell für die Anforderungen des Views erstellt.

Nachfolgend sind einige Beispiele für Ansichtsmodelle aufgeführt

  • Um Daten von mehr als Entitäten in einer Ansichtsseite aufzulisten, können wir eine View-Modell erstellen und Eigenschaften aller Entitäten haben, für die wir Daten auflisten wollen. Verbinden Sie diese Datenbank Entitäten und setzen Sie das View Model Eigenschaften und kehren Sie zur Ansicht zurück, um die Daten der verschiedenen Entitäten in einer tabellarischen Form
  • Das Ansichtsmodell kann nur bestimmte Felder einer einzelnen Entität definieren, die für den View benötigt werden.

ViewModel kann auch zum Einfügen und Aktualisieren von Datensätzen in mehr als einer Entität verwendet werden. Die Hauptanwendung von ViewModel ist jedoch die Anzeige von Spalten aus mehreren Entitäten (Modellen) in einer einzigen Ansicht.

Das Erstellen eines ViewModels ist dasselbe wie das Erstellen eines Models, das Erstellen einer Ansicht für das ViewModel ist dasselbe wie das Erstellen einer Ansicht für ein Model.

Hier ist ein kleines Beispiel für Daten auflisten mit ViewModel .

Ich hoffe, dass dies nützlich sein wird.

13voto

Mayank Punkte 171

View Model A ist eine einfache Klasse, die mehr als eine Klasseneigenschaft enthalten kann. Wir verwenden es, um alle erforderlichen Eigenschaften zu erben, z.B. habe ich zwei Klassen Student und Subject

Public class Student
{
public int Id {get; set;}
public string Name {get; set;}
}  
Public class Subject
{
public int SubjectID {get; set;}
public string SubjectName {get; set;}
}

Jetzt wollen wir Datensätze anzeigen Student's Name und Subject's Name in View (In MVC), aber es ist nicht möglich, mehr als eine Klassen wie hinzufügen:

 @model ProjectName.Model.Student  
 @model ProjectName.Model.Subject

wird der obige Code einen Fehler auslösen...

Jetzt erstellen wir eine Klasse und können ihr einen beliebigen Namen geben, aber dieses Format "XyzViewModel" macht es einfacher zu verstehen. Es ist ein Vererbungskonzept. Nun erstellen wir eine dritte Klasse mit dem folgenden Namen:

public class StudentViewModel:Subject
{
public int ID {get; set;}
public string Name {get; set;}
}

Jetzt verwenden wir dieses ViewModel in View

@model Projektname.Model.StudentViewModel

Jetzt können wir auf alle Eigenschaften von StudentViewModel und der geerbten Klasse in View zugreifen.

11voto

Jeroen Punkte 1125

MVC hat kein ViewModel, sondern ein Model, eine View und einen Controller. Ein ViewModel ist Teil von MVVM (Model-View-ViewModel). MVVM ist vom Präsentationsmodell abgeleitet und in WPF populär geworden. Es sollte auch ein Model in MVVM geben, aber die meisten Leute verpassen den Sinn dieses Musters völlig und haben nur eine View und ein ViewModel. Das Modell in MVC ist dem Modell in MVVM ähnlich.

In MVC ist der Prozess in 3 verschiedene Verantwortlichkeiten aufgeteilt:

  • Die Ansicht ist für die Darstellung der Daten für den Benutzer verantwortlich
  • Ein Controller ist für den Ablauf der Seite verantwortlich
  • Ein Modell ist für die Geschäftslogik zuständig

MVC ist für Webanwendungen nicht sehr geeignet. Es ist ein Muster, das von Smalltalk für die Erstellung von Desktop-Anwendungen eingeführt wurde. Eine Webumgebung verhält sich völlig anders. Es macht nicht viel Sinn, ein 40 Jahre altes Konzept aus der Desktop-Entwicklung zu kopieren und in eine Web-Umgebung einzufügen. Viele Leute denken jedoch, dass dies in Ordnung ist, weil ihre Anwendung kompiliert und die richtigen Werte zurückgibt. Meiner Meinung nach reicht das nicht aus, um eine bestimmte Designentscheidung für in Ordnung zu erklären.

Ein Beispiel für ein Modell in einer Webanwendung könnte sein:

public class LoginModel
{
    private readonly AuthenticationService authentication;

    public LoginModel(AuthenticationService authentication)
    {
        this.authentication = authentication;
    }

    public bool Login()
    {
        return authentication.Login(Username, Password);
    }

    public string Username { get; set; }
    public string Password { get; set; }
}

Der Kontrolleur kann sie wie folgt verwenden:

public class LoginController
{
    [HttpPost]
    public ActionResult Login(LoginModel model)
    {
        bool success = model.Login();

        if (success)
        {
            return new RedirectResult("/dashboard");
        }
        else
        {
            TempData["message"] = "Invalid username and/or password";
            return new RedirectResult("/login");
        }
    }
}

Ihre Steuerungsmethoden und Ihre Modelle werden klein, leicht testbar und auf den Punkt gebracht sein.

7voto

gsivanov Punkte 123

ViewModel ist ein Workaround, der die konzeptionelle Unbeholfenheit des MVC-Frameworks behebt. Es stellt die 4. Schicht in der dreischichtigen Model-View-Controller-Architektur dar. Wenn das Model (Domänenmodell) nicht geeignet oder zu groß (größer als 2-3 Felder) für die View ist, erstellen wir ein kleineres ViewModel, um es an die View zu übergeben.

2voto

Sagar Shinde Punkte 142

View Model ist eine Klasse, die wir zum Rendern von Daten in der View verwenden können. Angenommen, Sie haben zwei Entitäten "Place" und "PlaceCategory" und Sie möchten auf die Daten beider Entitäten mit einem einzigen Modell zugreifen, dann verwenden wir ViewModel.

public class Place
    {
       public int PlaceId { get; set; }
        public string PlaceName { get; set; }
        public string Latitude { get; set; }
        public string Longitude { get; set; }
        public string BestTime { get; set; }
    }
    public class Category
    {
        public int ID { get; set; }
        public int? PlaceId { get; set; }
        public string PlaceCategoryName { get; set; }
        public string PlaceCategoryType { get; set; }
    }
    public class PlaceCategoryviewModel
    {
        public string PlaceName { get; set; }
        public string BestTime { get; set; }
        public string PlaceCategoryName { get; set; }
        public string PlaceCategoryType { get; set; }
    }

Im obigen Beispiel sind also Ort und Kategorie zwei verschiedene Entitäten und PlaceCategory ViewModel ist ViewModel, das wir in der Ansicht verwenden können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X