Вы находитесь на странице: 1из 19

LTIMA ACTUALIZACIN: 13 DE OCTUBRE DE 2012

SERVICIO DE INFORMTICA | UNIVERSIDAD DE ALICANTE


ASP.NET MVC 3 y 4
CONTACTO CON ENTITY FRAMEWORK

Andrs Valls Botella | Analista | Desarrollos propios
Servicio de Informtica | Universidad de Alicante
Campus de Sant Vicent del Raspeig | 03690 | Espaa
http://si.ua.es/es/

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Andrs Valls Botella | Analista | Desarrollos propios
Servicio de Informtica | Universidad de Alicante
Campus de Sant Vicent del Raspeig | 03690 | Espaa
http://si.ua.es/es

2



2 DA CONTACTO CON ENTITY FRAMEWORK
CODE FIRST (SQL SERVER)
INTEGRAR APLICACIN DEL 1 DA
MVC est apuntando muy fuerte por el modelo de trabajo Code First. De forma muy resumida Code
First nos facilita que nosotros creamos el modelo con clases y luego ya se encargar el sistema de
traspasarlo a la base de datos. Todo esto lo vamos a probar desde SQL Server porque en el ODP de
Oracle no se ha implementado esta funcionalidad. Posiblemente en la nueva versin (a finales de
ao) ya vendr integrada.
Los pasos son muy sencillos. Lo primero es crear una clase que herede de DbContext que har de
nexo entre nuestra aplicacin y nuestra base de datos. Dentro de esta indicamos las tablas que se
deben crear. Sern parmetros pblicos del tipo DbSet<tabla>.
public class BibliotecaContext : DbContext
{
public DbSet<Libro> Libros { get; set; }
public DbSet<TipoLibro> TiposLibros { get; set; }
}

Ahora debemos crear una conexin a SQL Server con el mismo nombre de la clase que hemos creado
anteriormente. En nuestro caso BibliotecaContext.
<configuration>
<connectionStrings>
<add name="BibliotecaContext" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=CursoSI;Persist Security
Info=True;User ID=CursoSI;Password=Sergio" providerName="System.Data.SqlClient" />

Si queremos tener datos cargados por defecto cada vez que carguemos nuestra aplicacin podemos
acceder al global.asax y en Application_Start aadir un evento de inicializacin.
protected void Application_Start()
{
Database.SetInitializer(new BibliotecaContextInitializer());

En nuestro caso eliminamos completamente la base de datos y creamos un tipo de libro de tipo
novela.
public class BibliotecaContextInitializer
: DropCreateDatabaseAlways<BibliotecaContext>
{
protected override void Seed(BibliotecaContext context)
{
context.TiposLibros.Add(new TipoLibro { Descripcion = "Novela" });
}
}


ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Andrs Valls Botella | Analista | Desarrollos propios
Servicio de Informtica | Universidad de Alicante
Campus de Sant Vicent del Raspeig | 03690 | Espaa
http://si.ua.es/es

3



Como os habris fijado a los nombres de las tablas les ha aadido es. Por defecto pluraliza los
nombres de las tablas, y en el caso del espaol lo hace con es.
Para evitar este comportamiento debemos modificar la clase DbContext e incluir
protected override void OnModelCreating(DbModelBuilder dbModelBuilder)
{
dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}

Ahora si que aparecen las dos tablas con los nombres de nuestras clases.


Si ejecutamos al aplicacin, el resultado es el mismo, pero la diferencia principal es que los datos no
se almacenan en memoria como se haca ayer, sino que realmente se estn almacenando en


Si solo queremos que se borre la base de datos cuando se modifica la estructura del modelo y no
cada vez que se reinicie la aplicacin, accedemos al global.asax y modificamos
public class BibliotecaContextInitializer
: DropCreateDatabaseIfModelChanges <BibliotecaContext>

Si por el contrario solo queremos que se inicialice si no existe la base datos (el modelo sea muy
estable).
public class BibliotecaContextInitializer
: CreateDatabaseIfNotExists<BibliotecaContext>


ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Andrs Valls Botella | Analista | Desarrollos propios
Servicio de Informtica | Universidad de Alicante
Campus de Sant Vicent del Raspeig | 03690 | Espaa
http://si.ua.es/es

4



ENTITY FRAMEWORK
GESTIN DE TABLAS CON ENTITY FRAMEWORK
Vamos a crear un sencillo ejemplo en Oracle para ver que es y para que sirve el modelo Entity
Framework (FW).
Abrimos el Oracle SQL Developer y creamos dos tablas CSI_LIBRO, CSI_TIPOLIBRO


Creamos una secuencia (CSI_SEQ) para que las claves primarias de ambas tablas sean autonumricas
(Clave Primaria de Secuencia).
Ahora creamos un disparador para cada tabla. Botn derecho en la tabla > Disparador > Crear (Clave
Primaria de Secuencia).Indicamos un nombre para el disparador, seleccionamos la secuencia y el
nombre del campo al que queremos asignarlo y pulsamos aplicar.

Por ltimo creamos la relacin entre las tablas. Botn derecho > Restriccin > Agregar Clave Ajena
ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Andrs Valls Botella | Analista | Desarrollos propios
Servicio de Informtica | Universidad de Alicante
Campus de Sant Vicent del Raspeig | 03690 | Espaa
http://si.ua.es/es

5




Por el momento no vamos a crear ni vistas ni paquetes. Lo haremos ms adelante.
Creamos un nuevo proyecto en el Visual Studio ASP.NET MVC 3 de tipo Internet Application. Lo
llamamos CSI-BibliotecaBD.
Sobre el proyecto botn derecho > Agragar > Nuevo elemento En las plantillas seleccionamos
Datos y del listado seleccionamos ADO.NET Entity Data Model. El nombre del modelo
ModeloBiblioteca.edmx

En el siguiente asistente marcamos Generar desde la base de datos

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Andrs Valls Botella | Analista | Desarrollos propios
Servicio de Informtica | Universidad de Alicante
Campus de Sant Vicent del Raspeig | 03690 | Espaa
http://si.ua.es/es

6



Ahora creamos una nueva conexin con la base de datos de desarrollo. Marcamos S, incluir datos
confidenciales en la cadena de conexin y guardamos la configuracin como EntitiesBiblioteca.

Por ltimos seleccionamos las tablas y le indicamos como espacio de nombres Models


Se abrir una pestaa con el esquema de las tablas. A primera vista vemos que ha identificado las
claves principales de cada tabla y la relacin entre ambas.

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Andrs Valls Botella | Analista | Desarrollos propios
Servicio de Informtica | Universidad de Alicante
Campus de Sant Vicent del Raspeig | 03690 | Espaa
http://si.ua.es/es

7



Bueno pues es el momento de crear los controladores para cada una de las tablas.
Pulsamos F6 para compilar el proyecto y asegurarnos que el modelo EF es visible para el resto de
elementos de MVC. Botn derecho en la carpeta Controllers > Agregar > Controller Le asignamos el
nombre LibroController y en la plantilla/template seleccionamos Controller with read/write actions
and views, using Entity Framework. Pulsamos Add y no slo nos crea los mtodos como haca la
operacin de ayer, aade la lgica para su gestin y todas las vistas implicadas.

Para llamar al Index los comentarios del controlador nos indican que llamemos con /Libro/
El resultado es un entorno completo para poder gestionar libros

Es sorprendente como gestiona las relaciones entre las tablas, ya que aparece como un desplegable
con los datos de los tipos de libros.
ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Andrs Valls Botella | Analista | Desarrollos propios
Servicio de Informtica | Universidad de Alicante
Campus de Sant Vicent del Raspeig | 03690 | Espaa
http://si.ua.es/es

8




Aqu se ve la potencia real de MVC y EF. Con un par de clics hemos creado una gestin completa de
una tabla.
Haramos lo mismo para la otra tabla. Al controlador lo podramos llamar TipoLibroController.
Para poder gestionar ambas tablas desde el men superior (ahora mismo slo aparece Home y
About). Abrimos la carpetas Views > Shared y seleccionamos el fichero _Layout.cshtml. Parece una
pgina Web HTML pero incluye la nomenclatura de Razor. Nos fijamos en la zona de <ul> que se
identifica como menu y aadimos dos opciones ms.
<ul id="menu">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("Libros", "Index", "Libro")</li>
<li>@Html.ActionLink("Tipo de libros", "Index", "TipoLibro")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
</ul>

Compilamos y visualizamos en el navegador

Podemos gestionar ambas tablas y tipo que aadamos, tipo que podemos seleccionar luego en el
libro.
Vamos a modificar las vistas para que los textos aparezcan en castellano, que las cabeceras
identifiquen lo que gestionamos. El Index debera quedar como la pantalla siguiente.
ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Andrs Valls Botella | Analista | Desarrollos propios
Servicio de Informtica | Universidad de Alicante
Campus de Sant Vicent del Raspeig | 03690 | Espaa
http://si.ua.es/es

9




Implica modificar Views > Libro > Index.cshml para los elementos propios y Views > Shared >
_Layout.cshtml y _LogOnPartial.cshtml para los elementos comunes.
Hoy lo realizamos a mano para cada uno de los controladores. Maana ya modificaremos nuestra
aplicacin para que los cambios sean comunes para todos los controladores que creemos


ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Andrs Valls Botella | Analista | Desarrollos propios
Servicio de Informtica | Universidad de Alicante
Campus de Sant Vicent del Raspeig | 03690 | Espaa
http://si.ua.es/es

10



RAZOR EN DETALLE
MODELO
En la mayora de los casos la vista trabaja con los datos de un modelo.
Por eso nos podemos encontrar con dos casos, que le enviemos un nico registro (por ejemplo para
operaciones de creacin o edicin) o con un conjunto de datos (por ejemplo listados).
MODELO CON UN NICO REGISTRO
Por ejemplo para ver los detalles de un libro. Incluiremos @model RutaModelo al principio de la
vista.
@model CSI_BibliotecaBDOracle.CSI_LIBRO

Luego para usarlo dentro del cdigo haremos referencia directamente al objeto model
@Html.DisplayFor(model => model.ISBN)

MODELO CON UN CONJUNTO DE DATOS
Por ejemplo para ver el listado de libros. Incluiremos @model IEnumerable <RutaModelo> al
principio de la vista.
@model IEnumerable<CSI_BibliotecaBDOracle.CSI_LIBRO>

Luego para usarlo, por ejemplo en un bucle
@foreach (var item in Model) {
..
@Html.DisplayFor(modelItem => item.ISBN)
..

}

LAYOUT
Es el equivalente a las MasterPages en WebPages, es decir la plantilla comn para todas las pginas
de nuestro sitio.
Por defecto al crear un proyecto MVC nos crea en la carpeta Views > Shared el fichero
_Layout.cshtml. Esta pgina es la plantilla que usar el asistente de las vistas cuando no
seleccionamos ninguna.
Se puede seleccionar cualquier otra en el momento que creamos la vista
ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Andrs Valls Botella | Analista | Desarrollos propios
Servicio de Informtica | Universidad de Alicante
Campus de Sant Vicent del Raspeig | 03690 | Espaa
http://si.ua.es/es

11





o accediendo al cdigo de la vista generado y aadido la lnea Layout = Fichero con la plantilla para
la vista
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}

@RENDERBODY()
Se utiliza en _layout.cshtml para indicar que en ese punto se incluir el cdigo generado por la vista.
Todos los layouts deben incluirla. En caso de no hacerlo obtendremos el siguiente mensaje de error.
Error de servidor en la aplicacin '/'.
No se ha llamado al mtodo "RenderBody" para la pgina de diseo "~/Views/Shared/_layout.cshtml".
@SECTION
ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Andrs Valls Botella | Analista | Desarrollos propios
Servicio de Informtica | Universidad de Alicante
Campus de Sant Vicent del Raspeig | 03690 | Espaa
http://si.ua.es/es

12



Definimos una seccin de cdigo Razor / HTML que se insertar en el layout en caso de que se llame
a @rendersection con el nombre de la seccin que hayamos declarado.
@section NombreSeccin {

}

Si queremos definir una seccin cabecera, en cada vista la definiramos del siguiente modo.
@section cabecera {
<h1>Ejemplo de seccin</h1>
}


@RENDERSECTION
Incluimos en nuestra plantilla secciones o bloques de cdigo Razor / HTML que se ha definido en la
vista. Podemos indicar adems si es obligatorio o no definirla.
@RenderSection("NombreSeccin ", required: false / true)

Por defecto toma el valor true, con lo que en caso de que no la incluyamos en nuestra vista, dar un
mensaje de error.
Seccin no definida: "cabecera".
Descripcin: Excepcin no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener ms
informacin acerca del error y dnde se origin en el cdigo.
@RenderSection("cabecera", required:false)

ISSECTIONDEFINED
Por ltimo para controlar si se ha definido la seccin, disponemos de la funcin IsSectionDefined().
Siguiendo con el ejemplo de la cabecera podramos comprobar si se ha definido para darle un
formato y sino le damos otro formato.
@if (IsSectionDefined("cabecera"))
{
<div id="title">
@RenderSection("cabecera")
</div>
}
else
{
<div id="titledefalt"><h1 class="generico">Ttulo genrico</h1></div>
}

ETIQUETAS AVANZADAS
@()
En caso de que una variable, dentro del cdigo, pueda provocar confusin, podemos usar
@(variable). Por ejemplo
<img src="images/"@model.foto.jpg" />

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Andrs Valls Botella | Analista | Desarrollos propios
Servicio de Informtica | Universidad de Alicante
Campus de Sant Vicent del Raspeig | 03690 | Espaa
http://si.ua.es/es

13



No podramos afimar si est llamando a @model.foto y luego incorpora la extensin .jpg o que
interprete que .jpg es una propiedad de @model.foto.
Deberamos utilizar
<img src="images/"@(model.foto).jpg" />
Para evitar este conflicto.

@:
Aunque ya lo vimos ayer, lo vuelvo a remarcar. Aquel texto HTML que no incluya etiquetas puede
provocar que se interprete como cdigo Razor.
<span>
@if(true){
La hora es: @DateTime.Now
}
else
{
Aqu no se debera acceder nunca
}
</span>

No sabe si es cdigo HTML o cdigo C#. Para definrselo anteponemos @: (si slo es una lnea) para
decirle que es HTML
<span>
@if(true){
@:La hora es: @DateTime.Now
}
else
{
@:Aqu no se debera acceder nunca
}
</span>

Es equivalente a incluir el texto entre las etiquetas <text></text>

HTML.RAW
Escribe el contenido que le pasemos sin codificar (que es lo que hace por defecto ASP.NET MVC 3).
Puede que en ocasiones necesitemos que sea as (por ejemplo porque incluye etiquetas de formato),
aunque debemos tener mucho cuidado con el contendido para que no nos produzcan XSS Injection.
<h2>@Html.Raw(ViewBag.Message)</h2>


PARTIAL VIEWS
Como conocemos las vistas hasta ahora genera una pgina web en cada llamada. Con un layout por
defecto o personalizado, pasando por el cdigo generado por la vista y terminando con secciones
opcionales o no.
ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Andrs Valls Botella | Analista | Desarrollos propios
Servicio de Informtica | Universidad de Alicante
Campus de Sant Vicent del Raspeig | 03690 | Espaa
http://si.ua.es/es

14



Esto no lo hace muy complicado de mantener y sobre todo poco flexible. Por eso existen las vistas
parciales que permiten dividir la pgina en bloques ms pequeos lo que las hace ms fcil de
gestionar.
Puede ser muy til en llamada AJAX porque el cdigo generado es el que le indiquemos en la vista
parcial sin elementos como layout que se supone que se ha llamada anteriormente desde una vista.
Con un ejemplo lo vamos a ver muy claro.
Queremos hacer la suma de dos nmeros es un mtodo del controlador Home. Pasamos dos
parmetros y cambiamos return View(); por return PartialView();
public ActionResult Suma(int numero1, int numero2) {
ViewBag.Suma = numero1 + numero2;
return PartialView();
}
Ahora creamos la vista y la marcamos como parcial

Escribimos el resultado en la vista vaca (que no tiene ni model, ni layout)
@ViewBag.Suma

Cmo la llamamos? Lo normal es hacerlo como hasta ahora
http://servidor/home/suma?numero1=5&numero2=7

pero como es lgico el propsito no era ste. Nosotros queremos incluirlo dentro de otra vista y lo
vamos a hacer con AJAX, es decir se cargar una vista inicial y ante un evento modificaremos el
contenido de algn elemento de la vista inicial con el contenido de la vista parcial.
Incluimos el siguiente cdigo en algn mtodo de home
La suma de 5 y 7 es: <span id="operacion"></span>

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Andrs Valls Botella | Analista | Desarrollos propios
Servicio de Informtica | Universidad de Alicante
Campus de Sant Vicent del Raspeig | 03690 | Espaa
http://si.ua.es/es

15



<script type="text/javascript">
$(function(){
$("#operacion").load("/home/Suma?numero1=5&numero2=7");
});
</script>

La primera lnea pone un texto y prepara una etiqueta donde luego mostrar el resultado.
Las siguientes lneas son javascript y JQuery. Esta librera est muy integrada en Visual Studio con lo
que debemos aprovechar que la disponemos. Lo que hace es llamar a nuestro controlador con load y
poner el resultado en aquella etiqueta que tenga como id operacion ($(#idetiqueta)).
Visualmente vemos el resultado de la operacin, pero internamente ha hecho una segunda llamada
para obtener el resultado de la suma y luego ha modificado el contenido de la etiqueta.
No es obligatorio llamarlo desde javascript y con AJAX, podemos llamarlo desde nuestras propias
vistas. El ejemplo de ayer que mostrbamos un listado de libros. Usamos el siguientes cdigo
Listado de libros
<ul>
@foreach(var libro in (IEnumerable<MVC_3.Models.Libro>)ViewBag.Libros)
{
<li>@libro.Titulo (@libro.TipoLibro)</li>
}
</ul>

Si el formato de la ficha del libro fuera muy amplia, sera una buena solucin convertirla en una vista
parcial y llamarla desde nuestra propia vista
Listado de libros (Vistas parciales)
@foreach(var libroItem in (IEnumerable<MVC_3.Models.Libro>)ViewBag.Libros)
{
@RenderPage("~/Views/Demo/Formato.cshtml", new {libro = libroItem});
}

Para recoger los parmetros tenemos que usar el objeto Page y como propiedad lo que hayamos
pasado, en este caso libro y trabaramos con las propiedades de ste como si fuera el modelo.
@{
var Model = Page.libro;
}

<div>
<strong>Ttulo: </strong>
@Model.Titulo
</div>

<div style="margin-bottom: 20px;">
<strong>ISBN: </strong>
@Model.Isbn
</div>
En este segundo caso no se hace una llamada por cada libro, ya que se hace internamente antes de
devolver la pgina completa.

HELPERS (BSICO)
Los Helpers podramos entenderlo como una forma de facilitar de reutilizar cdigo que escribimos en
muchas ocasiones.
ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Andrs Valls Botella | Analista | Desarrollos propios
Servicio de Informtica | Universidad de Alicante
Campus de Sant Vicent del Raspeig | 03690 | Espaa
http://si.ua.es/es

16



MVC nos ofrece de dos tipos:
HTMLHelpers orientados a escribir cdigo HTML. La mayora de mtodos que nos ofrece son
para trabajar con formularios, simplificando y unificando enormemente este proceso.
URLHelpers orientada a simplificar el trabajo con direcciones y conversiones de caracteres.

En el da de hoy nos centraremos en los segundos porque son muy pocos y los necesitamos para
poder crear nuestro primer layout / plantilla.
URLHELPER
Para poder usar este Helper dentro del motor Razor antepondremos @Url al mtodo que queramos
llamar. Por ejemplo si queremos poner la ruta de nuestro fichero css, en el layout por defecto hace
uso del mtodo Content de URLHelper.
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />

La integracin es muy sencilla porque no debemos hacer ninguna referencia externa y dispone de
intellisense lo que facilita su escritura.
Los 4 mtodos que lo forman son
Action(s:action, s:controller, )
Genera la direccin completa de la llamada a un mtodo / accin de un controlador.
Por ejemplo si queremos crear un enlace a Acerca de, podramos usar el siguiente cdigo HTML
<a href="@Url.Action("About", "Home")">Acerca de</a>

Si queremos hacer una llamada a un mtodo Buscar al que le pasemos el trmino de bsqueda,
incluiramos un tercer campo, con los parmetros que queramos personalizar.
<a href="@Url.Action("Buscar", "Home", new { busqueda = "Servicio de Informtica" })">Buscar por "Servicio de
Informtica"</a>

Si el mtodo permite la recepcin del parmetro busqueda, entonces lo podramos usar.
public ActionResult Buscar(string busqueda)
{
ViewBag.Search = busqueda;
return View();
}

Content(s:path)
Convierte una direccin virtual / relativa en su correspondiente direccin absoluta de la aplicacin. Es
muy til cuando hacemos referencia a ficheros como hojas de estilo o javascript
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Andrs Valls Botella | Analista | Desarrollos propios
Servicio de Informtica | Universidad de Alicante
Campus de Sant Vicent del Raspeig | 03690 | Espaa
http://si.ua.es/es

17



Encode(s:url)
Codifica los caracteres especiales de una URL por sus equivalentes caracteres estndar.
Se usa para evitar problemas con ciertos navegadores que no interpretan los caracteres especiales.
En el ejemplo anterior el envo de Servicio de Informtica sera uno de los casos que nos podran
dar errores por os espacios y acento.
<a href="@Url.Action("Buscar", "Home", new { busqueda = Url.Encode("Servicio de Informtica") })">Buscar por "Servicio de
Informtica"</a>

La direccin que nos genera es
http://servidor/Home/Buscar?busqueda=Servicio%2Bde%2BInform%25c3%25a1tica
RouteUrl(s:route)
Muy parecido al primero pero todo en uno, es decir pasamos los parmetros que queramos en un
nico parmetro, de la siguiente manera new { Controller = , Action = , }
La misma llamada Acerca de pero con RouteUrl sera.
<a href="@Url.RouteUrl(new {Controller = "Home", Action = "About"})">Acerca de</a>

Si queremos pasar tambin el campo de bsqueda (o el id)
<a href="@Url.RouteUrl(new {Controller = "Home", Action = "Buscar", busqueda = "Servicio de Informtica" })">Buscar por
"Servicio de Informtica"</a>

Maana nos centraremos en los HTMLHelpers y veremos como crear los nuestros propios.

COMPRENDIENDO LAS VI STAS POR DEFECTO
Ahora que ya tenemos ms conocimientos de Razor vamos a analizar las 5 vistas que nos ha
generado por defecto para las tablas CSI_LIBRO y CSI_TIPOLIBRO.
Create.cshtml
Delete.cshtml
Details.cshtml
Edit.cshtml
Index.cshtml

CONVERTIR UNA PGINA WEB A PLANTILLA
EJEMPLO DE PREGUNTAS Y RESPUESTAS (FAQS)
Vamos a usar la pgina Dynamic FAQ Section w/ jQuery, YQL &amp; Google Docs | Tutorialzine
Demo (http://tutorialzine.com/2010/08/dynamic-faq-jquery-yql-google-docs/) como plantilla de
trabajo para nuestro ejemplo.
ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Andrs Valls Botella | Analista | Desarrollos propios
Servicio de Informtica | Universidad de Alicante
Campus de Sant Vicent del Raspeig | 03690 | Espaa
http://si.ua.es/es

18



La diferencia est en la forma en que obtiene los datos. En esta pgina usa Google Docs para obtener
el contenido. Nosotros vamos a crear una tabla con preguntas y respuestas y ser lo que
mostraremos y gestionaremos.
La demo la forman 3 ficheros, la pgina web, una hoja de estilo y un documento javascript. Los 3
estn en una misma carpeta raz. Para seguir el formato que sugiere ASP.NET, debera quedar:
Index.html -> /Views/Shared/_layoutfaq.cshtml
script.js -> /Scripts/ script.js
styles.css -> /Content/ styles.css
img/* -> /Content/img/*

Ahora debemos modificar _layoutfaq.cshtml para que las referencias sean correctas.
Usaremos uno de los helpers que acabamos de ver Url.Content para hacer referencia a las hojas de
estilo y ficheros javascript.
Modificamos el mtodo Index de HomeController para que muestre algunas preguntas y respuestas.
Realizarlo con secciones y con un modelo personalizado.

EJEMPLO PRCTICO
DESARROLLO COMPLETO CON EF DE UNA APLICACIN DE PREGUNTAS Y
RESPUESTAS
Ahora vamos a desarrollarlo con tablas de Oracle.
Para evitar conflictos a la hora de crear tablas cada alumno tendr un nmero que pospondr al
nombre de la tabla. La ordenacin la haremos basndonos en el listado de alumnos que se dispone
de Seleccin y Formacin. En mi caso la tabla se llama FAQ_00.


Crear la tabla e incluirla en el proyecto MVC. Crear el controlador para su gestin y modificar el
mtodo Index de HomeController para que muestre los datos de la tabla.

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Andrs Valls Botella | Analista | Desarrollos propios
Servicio de Informtica | Universidad de Alicante
Campus de Sant Vicent del Raspeig | 03690 | Espaa
http://si.ua.es/es

19



SELECCIN DE PROYECTO
El objetivo de este curso es que sea lo ms prctico posible. Por eso durante cada una de las sesiones
se dedicar un tiempo para trabajar en un proyecto al que cada da se incorporar lo que se vea
durante la sesin.
Se van a presentar 3 proyectos. El desarrollo completo de un proyecto por parte de una persona es
bastante complicado en 6-8 horas que se dejar para su desarrollo, por eso se formarn 3 grupos al
que se le asignar a cada persona una tarea.

PRESENTACIN DE PROYECTOS
Catalogo de recursos o enlaces
Agenda Universitaria
Gestin de peticiones / incidencias
Autocolega

Se han seleccionado stos porque son proyectos muy utilizados actualmente en la UA y est
desarrollados con una programacin muy desfasada y difcil de mantener / actualizar.
En todos los proyectos se analizar la posibilidad de mantener la informacin actual, respetando la
estructura o creando una nueva con posibilidades de migrar los datos (2 de ellas estn desarrolladas
en SQL Server y sera un buen momento para traspasarlas a Oracle).
En caso de que alguien proponga un proyecto nuevo o con posibilidades de desarrollar durante el
curso, se incorporar sin ningn problema.

CREACIN DE 4/8 GRUPOS
Dependiendo de las personas que asistan a clase se puede ampliar/reducir el nmero de grupos.
La idea es que al menos cada grupo lo formen 2/6 personas para poder adelantar en todas las tareas,
diseo, gestin y base de datos.

REPARTIR TAREAS
Las tareas se pueden corresponder con cada uno de los mdulos del MVC, es decir uno se puede
encargar del modelado, otro del aspecto visual y otro de los controladores. Cada da antes de
empezar a trabajar, el grupo analizar lo que van a desarrollar porque es posible que uno
dependencias obligue a cambiar el orden de realizar determinadas tareas.
Al final de cada clase dedicaremos 5 minutos a revisar los problemas ms generales que hayan
surgido. Si la cosa se complica, por correo se me envan las sugerencias / incidencias y las analizo
para la siguiente clase.
El ltimo da cada grupo presentar su proyecto al resto de la clase (no ser ms de 10 minutos por
proyecto). Ya explicar ms adelante los puntos a presentar.

Вам также может понравиться