Tomando como base la nota anterior donde usamos ExtJs con MVC3, propongo hacer el mismo trabajo pero con Web-Api, la nueva plataforma de Microsoft que permite construir fácilmente servicios HTTP. Esta plataforma es ideal para aplicationes RESTful, asi como dispositivos móbiles, sitios web, etc.
Veamos como proceder:
1) Creación del proyecto ASP.NET MVC 4
2) De XML a JSON
Web-Api genera por defecto datos en formato XML. A nosotros nos es más conveniente el formato JSON, para modificar este comportamiento, basta agregar una linea de código dentro del archivo Global.asax.cs:
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
3) Modelos
Creamos dos archivos, uno llamado Libros.cs (idéntico al de la nota anterior) y uno nuevo llamado ExtAnswer.cs, que contendrá la respuesta JSON producida por el controlador web-api.
public class Libro
{
public string Codigo { get; set; }
public string Titulo { get; set; }
public string Autor { get; set; }
public string Idioma { get; set; }
public decimal Precio { get; set; }
}
public class ExtAnswer
{
public List<Libro> data { get; set; }
public int total { get; set; }
public bool success { get; set; }
}
4) Creación de un nuevo Controlador
Agregamos una nueva clase de tipo ApiController, dentro el archivo: BooksController.cs,
public ExtAnswer GetLibros(){
Libro libro1 = new Libro { Titulo = "En un rincón del alma", Autor = "Antonia de J. Corrales", Codigo = "9788415420231", Idioma = "Español", Precio = 15.00M };
Libro libro2 = new Libro { Titulo = "La casa de Riverton", Autor = "Kate Morton", Codigo = "9788466325066", Idioma = "Español", Precio = 10.99M };
Libro libro3 = new Libro { Titulo = "Dime quién soy", Autor = "Julia Navarro", Codigo = "9788499087566", Idioma = "Español", Precio = 21.00M };
Libro libro4 = new Libro { Titulo = "La caida de los gigantes", Autor = "Ken Follet", Codigo = "9788499893570", Idioma = "Español", Precio = 12.95M };
Libro libro5 = new Libro { Titulo = "El tiempo entre costuras", Autor = "Maria Dueñas", Codigo = "9788499981833", Idioma = "Español", Precio = 13.77M };
List<Libro> libros = new List<Libro>();
libros.Add(libro1);
libros.Add(libro2);
libros.Add(libro3);
libros.Add(libro4);
libros.Add(libro5);
return new ExtAnswer { data = libros, total = libros.Count, success = true };
}
5) Vista
Finalmente modificamos la vista por defecto del proyecto (Index.cshtml), agregando el script que usamos en la nota anterior, casi sin modificaciones:
<header>
<div class="content-wrapper">
<div class="float-left">
<p class="site-title">
<a href="~/">ASP.NET Web API</a></p>
</div>
</div>
<link href="../../Content/ext-all.css" rel="stylesheet" type="text/css" />
</header>
<div id="body">
<section class="content-wrapper main-content clear-fix">
<h3>Utilización de ExtJs con Web-API:</h3>
<div id="contenedor">
</div>
</section>
<script type="text/javascript" src="../../Scripts/jquery-1.7.1.min.js"></script>
<script type="text/javascript" charset="utf-8" src="http://cdn.sencha.io/ext-4.1.0-gpl/ext-all.js"></script>
<script type="text/javascript">
Ext.define('Myapp.model.Libro', {
extend: 'Ext.data.Model',
fields: [
{ name: 'Codigo', type: 'string' },
{ name: 'Titulo', type: 'string' },
{ name: 'Autor', type: 'string' },
{ name: 'Idioma', type: 'string' },
{ name: 'Precio', type: 'string' },
]
});
var mystore = new Ext.data.Store({
extend: 'Ext.data.Store',
requires: ['Myapp.model.Libro'],
model: 'Myapp.model.Libro',
autoLoad: true,
autoSync: false,
proxy: {
type: 'ajax',
api: {
read: 'api/Books/List'
},
appendId: false,
batchActions: true,
reader: {
type: 'json',
root: 'data',
messageProperty: 'message',
successProperty: 'success',
totalProperty: 'total'
}
}
});
$(document).ready(function () {
var grid = Ext.create('Ext.grid.Panel', {
store: mystore,
title: 'Libros',
requires: 'MyApp.model.Libro',
stateful: true,
collapsible: true,
multiSelect: true,
stateId: 'stateGrid',
columns: [
{ header: 'Codigo', dataIndex: 'Codigo' },
{ header: 'Titulo', dataIndex: 'Titulo' },
{ header: 'Autor', dataIndex: 'Autor' },
{ header: 'Idioma', dataIndex: 'Idioma' },
{ header: 'Precio', dataIndex: 'Precio' }
],
renderTo: 'contenedor',
width: 700,
height: 400
});
grid.getStore().load();
});
</script>
</div>
No nos resta que lanzar el programa, pulsando F5 desde Visual Studio, la página principal deberia mostrar la grilla con los resultados:
Desde este enlace se puede descargar el proyecto completo


Thanks for sharing your thoughts. I really appreciate your efforts
and I wil be waiting for your next post thank yoou once again.
Ahaa, its good dialogue on the topic of this paragraph at this
place at this website, I have read all that, so at this time me also commenting
here.