Je suis à la toute première étape de MVC.MVC vue modèle découplage
Dans mon premier exemple, j'ai un modèle comme ceci:
public class GuestResponse
{
[Required(ErrorMessage = "Please enter your name")]
public string Name { get; set; }
[Required(ErrorMessage = "Please enter your email")]
[RegularExpression(".+\\@.+\\..+", ErrorMessage = "Please enter a valid email address")]
public string Email { get; set; }
public string Phone { get; set; }
[Required(ErrorMessage = "Please specify whether you'll attend")]
public bool? WillAttend { get; set; }
}
le contrôleur:
public class HomeController : Controller
{
public ViewResult Index()
{
ViewData["greeting"] = (DateTime.Now.Hour < 12 ? "Good morning" : "Good afternoon");
return View();
}
[HttpGet]
public ViewResult RsvpForm()
{
return this.View();
}
[HttpPost]
public ViewResult RsvpForm(GuestResponse guestResp)
{
if (ModelState.IsValid)
{
return this.View("Thanks", guestResp);
}
else
{
return this.View();
}
}
}
et une vue:
<body>
<div>
<h1>
Thank you,
<%: Model.Name %>.</h1>
<p>
<% if (Model.WillAttend == true)
{ %>
It's great that you're coming. The drinks are already in
the fridge!
<% }
else
{ %>
Sorry to hear you can't make it, but thanks for letting
us know.
<% } %>
</p>
</div>
Ce qui semble étrange à moi, est-ce que le Vi ew est fortement couplé avec le modèle: il utilise un code comme Model.WillAttend
ecc ... Alors, que se passera-t-il si dans un futur le modèle change? Je devrais avoir à changer tous les snippets à l'intérieur de cette vue particulière (mais peut-être aussi dans beaucoup d'autres vues ...) Est-ce serrement-couplage ou ai-je manqué le point ici?
EDIT
Dans le livre, l'auteur souligne que ce mécanisme utile est
Modèle Reliure
Étant donné que la méthode [publique ViewResult RsvpForm (GuestResponse guestResp) ] est invoqué via une requête HTTP, et que GuestResponse est un type .NET totalement inconnu de HTTP, comment une requête HTTP peut-elle éventuellement fournir une instance de GuestResponse? La réponse est la liaison de modèle, une fonctionnalité extrêmement utile d'ASP.NET MVC, par laquelle les données entrantes sont automatiquement analysées et utilisées pour remplir les paramètres de méthode d'action en faisant correspondre les paires clé/valeur entrantes avec les noms des propriétés sur le type .NET souhaité. Ce mécanisme puissant et personnalisable élimine une grande partie de la plomberie banale associée à la gestion des requêtes HTTP, vous permettant de travailler principalement en termes d'objets .NET plutôt typés plutôt que que de bidouiller de bas niveau avec Request.Form [] et Request.QueryString [] dictionnaires, comme c'est souvent le cas dans les formulaires Web. Étant donné que les contrôles d'entrée définis dans RsvpForm.aspx renvoient avec des noms correspondant aux noms de propriétés sur GuestResponse, le framework fournira à votre méthode d'action une instance de GuestResponse déjà remplie avec toutes les données que l'utilisateur a saisies dans le formulaire .
Mes deux cents: mais alors, ce mécanisme vous donne l'avantage des classes fortement typées dans la vue (qui, cependant, est vraiment utile grâce à Visual Studio fonctionnalité IntelliSense, sinon à mon avis aussi la demande. La syntaxe Form [] correspondrait à la même chose). D'un autre côté, vous associez étroitement la vue au modèle, de sorte que chaque minuscule changement apporté au modèle entraîne une cascade de modifications sur les vues liées.
Je vois ce que vous voulez dire ... Cependant, cet exemple est tiré du livre de Steven Sanderson sur MVC. C'est le tout premier exemple de MVC présenté dans le livre, et l'auteur explique que c'est MVC (pas MVVM). – spiderman77
Eh bien, je suppose qu'il a raison à certains égards - cependant, l'architecture est à peu près la même. – James