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:
- Como um objeto de modelo fortemente tipado.
- Como um tipo dinâmico (usando @model dinâmico)
- Usando o ViewBag
Escrevi um aplicativo de blog MVC 3 Top simples para comparar e contrastar exibições dinâmicas e fortemente tipadas. 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 razor.
Verifique se a caixa Criar um modo de exibição fortemente tipado 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 fortemente tipada, o intelliSense não nos ajuda. O código concluído é 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>
Agora, adicionaremos uma exibição fortemente tipada. Adicione o seguinte código ao controlador:
public ActionResult StonglyTypedIndex() {
return View(topBlogs);
}
Observe que é exatamente o mesmo modo de 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 Modelo de Blog e selecione Listar como o modelo scaffold.
Dentro do novo modelo de exibição, obtemos suporte ao IntelliSense.