Vos modèles de récupérer des données, votre présentateur organise des données pour la vue, et la vue contrôles liant votre modèle aux éléments de l'interface utilisateur. Par exemple, voici un modèle pour une LogEvent:
public class LogEvent{
public string Title {get;set;}
public string Date {get;set;}
public string Message {get;set;}
// this is for example only; you would most likely bind directly against the host.GetAllLogs() result
public static IEnumerable<LogEvent> RetrieveAllLogs(ILogProvider host){
return from x in host.GetAllLogs() select new LogEvent(x.LogTitle, x.Date, x.Message);
}
Voici le contrôleur qui gère une demande de l'utilisateur pour afficher tous les journaux:
[DependencyPropertyLolJk]
protected ILogProvider MyLogProvider {get;set;} // set by DI
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Logs()
{
return View("Logs", LogEvent.GetAllLogs(MyLogProvider).OrderByDescending(x => x.Date));
}
Et est la vue ici et comment il se lie au modèle:
<!-- header left out for brevity -->
<table>
<thead>
<tr>
<th>
Date
</th>
<th>
Title
</th>
<th>
Message
</th>
</tr>
</thead>
<% foreach(var log in ViewData.Model) %>
<tr>
<td><%= log.Date %></td>
<td><%= log.Title %></td>
<td><%= log.Message %></td>
</tr>
<% }; %>
</table>
<!-- ... -->
Donc, vous voyez, vous devez écrire votre code HTML en utilisant le code en ligne. Cela fonctionne bien pour les interfaces utilisateur simples, mais peut être complexe et une corvée quand il s'agit de choses plus complexes, telles que les pagers et les gridviews. Lorsque votre interface utilisateur devient complexe, la meilleure chose à faire est de créer des extensions à la classe HtmlHelper. Voici deux exemples qui montrent comment cela peut réduire la complexité de vos contrôles d'interface utilisateur: HtmlHelper GridView et Pager. J'ai créé des méthodes d'aide similaires, et c'est assez remarquable comment vous pouvez mélanger le code html et inline au sein de lambdas. Maintenant, si le concepteur était seulement capable de formater ce type de code mixte/markup décemment ...
désolé, je voulais seulement dire la partie Databinding (je sais comment MVC est censé fonctionner, je suis bloqué sur les détails de l'implémentation :)) – Luk