Partager via


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 :

  1. En tant qu’objet de modèle fortement typé.
  2. En tant que type dynamique (à l’aide de @model dynamiques)
  3. 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.

8475.NotStronglyTypedView[1]

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>

6646.NotStronglyTypedView_5F00_IE[1]

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.

5658.StrongView[1]

Dans le nouveau modèle d’affichage, nous obtenons la prise en charge d’IntelliSense.

7002.IntelliSense[1]