Modos de exibição dinâmicos versus Exibições fortemente tipadas

por Rick Anderson

Há três maneiras de passar informações de um controlador para uma exibição no ASP.NET MVC 3:

  1. Como um objeto de modelo fortemente tipado.
  2. Como um tipo dinâmico (usando @model dinâmico)
  3. Usando ViewBag

Escrevi um aplicativo de blog mais simples MVC 3 para comparar e contrastar exibições dinâmicas e com rigidez de tipos. O controlador começa com uma lista simples 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();
        }
    }
}

Clique com o botão direito do mouse no método IndexNotStonglyTyped () e adicione uma exibição do Razor.

8475. NotStronglyTypedView [1]

Verifique se a caixa de exibição criar um tipo forte não está marcada. A exibição resultante não contém muito:

@{
    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

Como estamos usando uma exibição dinâmica e não com rigidez de tipos, o IntelliSense não nos ajuda. O código completo é mostrado abaixo:

@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]

Agora, adicionaremos uma exibição com rigidez de tipos. Adicione o seguinte código ao controlador:

public ActionResult StonglyTypedIndex() {
    return View(topBlogs);
}

Observe que é exatamente a mesma exibição de retorno (topBlogs); Chame como a exibição não fortemente tipada. Clique com o botão direito do mouse dentro de StonglyTypedIndex () e selecione Adicionar exibição. Desta vez, selecione a classe de modelo de blog e selecione lista como o modelo Scaffold.

5658. StrongView [1]

Dentro do novo modelo de exibição, obtemos suporte ao IntelliSense.

7002. IntelliSense [1]