Vues fortement typées et vues dynamiques
par Rick Anderson
Il existe trois façons de transmettre des informations d’un contrôleur à une vue dans ASP.NET MVC 3 :
- En tant qu’objet de modèle fortement typé.
- En tant que type dynamique (à l’aide de @model dynamiques)
- Utilisation de ViewBag
J’ai écrit une application de blog MVC 3 Top simple pour comparer et comparer les vues dynamiques et fortement typées. Le contrôleur commence par une liste simple de blogs :
using System.Collections.Generic;
using System.Web.Mvc;
namespace Mvc3ViewDemo.Controllers {
public class Blog {
public string Name;
public string URL;
}
public class HomeController : Controller {
List<Blog> topBlogs = new List<Blog>
{
new Blog { Name = "ScottGu", URL = "http://weblogs.asp.net/scottgu/"},
new Blog { Name = "Scott Hanselman", URL = "http://www.hanselman.com/blog/"},
new Blog { Name = "Jon Galloway", URL = "http://www.asp.net/mvc"}
};
public ActionResult IndexNotStonglyTyped() {
return View(topBlogs);
}
public ActionResult About() {
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}
}
}
Cliquez avec le bouton droit dans la méthode IndexNotStonglyTyped() et ajoutez une vue Razor.
Vérifiez que la case Créer une vue fortement typée n’est pas cochée. La vue résultante ne contient pas beaucoup :
@{
ViewBag.Title = "IndexNotStonglyTyped";
}
<h2>IndexNotStonglyTyped</h2>
On the first line of the Views\Home\IndexNotStonglyTyped.cshtml file, add the model directive and the dynamic keyword.
@model dynamic
Étant donné que nous utilisons une vue dynamique et non fortement typée, IntelliSense ne nous aide pas. Le code terminé est illustré ci-dessous :
@model dynamic
@{
ViewBag.Title = "IndexNotStonglyTyped";
}
<h2>Index Not Stongly Typed</h2>
<p>
<ul>
@foreach (var blog in Model) {
<li>
<a href="@blog.URL">@blog.Name</a>
</li>
}
</ul>
</p>
Nous allons maintenant ajouter une vue fortement typée. Ajoutez le code suivant au contrôleur :
public ActionResult StonglyTypedIndex() {
return View(topBlogs);
}
Notez qu’il s’agit exactement de la même vue de retour (topBlogs); appeler en tant que vue non fortement typée. Cliquez avec le bouton droit à l’intérieur de StonglyTypedIndex(), puis sélectionnez Ajouter une vue. Cette fois, sélectionnez la classe Modèle de blog , puis sélectionnez Liste comme modèle de structure.
Dans le nouveau modèle d’affichage, nous obtenons la prise en charge d’IntelliSense.