lunes, 29 de octubre de 2012

Dynamic v. Strongly Typed Views MVC

Hay tres formas de pasar información de un controlador a una vista en ASP.NET MVC 3:


1.) Strongly typed model object.
2.) Dynamic type (using @model dynamic)
3.) Using the ViewBag

Vamos a crear y llenar una simple lista blogs para nuestro ejemplo.

Primer paso vamos agregar el siguiente código el controller home.


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();
        }
    }
}

Vamos añadir un View Razor con el nombre 
IndexNotStonglyTyped() , para eso presionamos clic derecho sobre el metodo y luego add view.



Abrimos la vista IndexNotStonglyTyped y agregamos el siguiente Ejemplo:


@model dynamic
@{
    ViewBag.Title = "IndexNotStonglyTyped";
}

<h2>IndexNotStonglyTyped</h2>

<p>
    <ul>
        @foreach (var blog in Model)
        {
            <li>
                <a href="@blog.URL">@blog.Name</a>
            </li>   
        }
    </ul>
</p>

El resultado sera:






Ahora realizaremos el ejemplo de strongly typed.



Vamos agregar el siguiente otro metodo al controller home.


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

Vamos añadir un View Razor con el nombre StonglyTypedIndex() , para eso presionamos clic derecho sobre el metodo y luego add view.



Abrimos la vista StonglyTypedIndex y agregamos el siguiente Ejemplo:


@model IEnumerable<Mvc3ViewDemo.Controllers.Blog>

@{
    ViewBag.Title = "StonglyTypedIndex";
}

<h2>StonglyTypedIndex</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
           <a href="@item.URL">@item.Name</a>          
        </td>
    </tr>
}

</table>

El resultado sera:




No hay comentarios.: