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.

1voto

Ein Ansichtsmodell ist ein konzeptionelles Modell der Daten. Es dient beispielsweise dazu, eine Teilmenge von Daten zu erhalten oder Daten aus verschiedenen Tabellen zu kombinieren.

Wenn Sie nur bestimmte Eigenschaften wünschen, können Sie so nur diese laden und keine unnötigen Eigenschaften hinzufügen.

1voto

wild coder Punkte 810
  • ViewModel enthalten Felder, die in der Ansicht dargestellt werden (für LabelFor,EditorFor,DisplayFor-Helfer)
  • ViewModel kann mit Hilfe von Datenannotationen spezifische Validierungsregeln haben oder IDataErrorInfo.
  • ViewModel kann mehrere Entitäten oder Objekte aus verschiedenen Daten haben Datenmodellen oder Datenquellen enthalten.

Entwerfen von ViewModel

public class UserLoginViewModel 
{ 
    [Required(ErrorMessage = "Please enter your username")] 
    [Display(Name = "User Name")]
    [MaxLength(50)]
    public string UserName { get; set; }

    [Required(ErrorMessage = "Please enter your password")]
    [Display(Name = "Password")]
    [MaxLength(50)]
    public string Password { get; set; } 
} 

Darstellung des Ansichtsmodells in der Ansicht

@model MyModels.UserLoginViewModel 
@{
    ViewBag.Title = "User Login";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm())
{
    <div class="editor-label">
        @Html.LabelFor(m => m.UserName)
    </div>
    <div class="editor-field">
        @Html.TextBoxFor(m => m.UserName)
        @Html.ValidationMessageFor(m => m.UserName)
    </div>
    <div class="editor-label">
        @Html.LabelFor(m => m.Password)
    </div>
    <div class="editor-field">
        @Html.PasswordFor(m => m.Password)
        @Html.ValidationMessageFor(m => m.Password)
    </div>
    <p>
        <input type="submit" value="Log In" />
    </p>
}

Arbeiten mit Action

public ActionResult Login()
{ 
    return View();
}

[HttpPost]
public ActionResult Login(UserLoginViewModel user)
{
    // To access data using LINQ
    DataClassesDataContext mobjentity = new DataClassesDataContext();

    if (ModelState.IsValid) 
    { 
        try
        {
            var q = mobjentity.tblUsers.Where(m => m.UserName == user.UserName && m.Password == user.Password).ToList();  

            if (q.Count > 0) 
            { 
                 return RedirectToAction("MyAccount");
            }
            else
            {
                ModelState.AddModelError("", "The user name or password provided is incorrect.");
            }
        }
        catch (Exception ex)
        {
        } 
    } 
    return View(user);
} 
  1. Fügen Sie in ViewModel nur die Felder/Daten ein, die Sie auf der Ansicht/Seite anzeigen wollen.
  2. Da die Ansicht die Eigenschaften des ViewModel wiedergibt, ist sie also einfach zu rendern und zu warten.
  3. Verwenden Sie einen Mapper, wenn das ViewModel komplexer wird.

1voto

Wenn Sie den Code für die Einrichtung einer "Baseline"-Webanwendung mit ViewModels studieren möchten, kann ich Ihnen empfehlen, diesen Code auf GitHub herunterzuladen: https://github.com/ajsaulsberry/BlipAjax . Ich habe große Unternehmensanwendungen entwickelt. Wenn man das tut, ist es problematisch, eine gute Architektur aufzubauen, die all diese "ViewModel"-Funktionalität handhabt. Ich denke, mit BlipAjax haben Sie eine sehr gute "Basis" für den Anfang. Es ist nur eine einfache Website, aber in ihrer Einfachheit großartig. Mir gefällt die Art und Weise, wie sie die englische Sprache verwendet haben, um darauf hinzuweisen, was in der Anwendung wirklich benötigt wird.

1voto

Sh.Imran Punkte 1035

ViewModel ist das Modell, das die in der MVC-Ansicht zu verwendenden Felder enthält. Die Verwendung von ViewModel für die Ansicht hat die folgenden Vorteile:

  • Da das Datenbankmodell (Entity-Klasse) die Daten einer einzigen Tabelle enthält. Wenn Daten aus mehreren Tabellen benötigt werden, kann ein einzelnes ViewModel mehrere Tabellenfelder haben.
  • Der Benutzer kann nicht direkt mit dem Datenbankmodell interagieren, daher ist die Datenbankschicht oder das Modell gesichert.
  • Es wird verwendet, um Daten aus dem Datenbankmodell über das Repository zu erhalten und sie an die Ansicht zu übergeben. In ähnlicher Weise wird es für die Buchung von Daten in das Datenbankmodell verwendet, um Datenbankeinträge zu aktualisieren.

0voto

Kunal Samal Punkte 30

Das Ansichtsmodell ist dasselbe wie Ihr Datenmodell, aber Sie können 2 oder mehr Datenmodellklassen darin hinzufügen. Dementsprechend müssen Sie Ihren Controller so ändern, dass er 2 Modelle auf einmal aufnehmen kann

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