- 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);
}
- Fügen Sie in ViewModel nur die Felder/Daten ein, die Sie auf der Ansicht/Seite anzeigen wollen.
- Da die Ansicht die Eigenschaften des ViewModel wiedergibt, ist sie also einfach zu rendern und zu warten.
- Verwenden Sie einen Mapper, wenn das ViewModel komplexer wird.