ASP.NET MVC 3 y 4 - Servicio de Informática
Transcription
ASP.NET MVC 3 y 4 - Servicio de Informática
SERVICIO DE INFORMÁTICA | UNIVERSIDAD DE ALICANTE ASP.NET MVC 3 y 4 CONTACTO CON ENTITY FRAMEWORK Andrés Vallés Botella | Analista | Desarrollos propios Servicio de Informática | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | España http://si.ua.es/es/ ÚLTIMA ACTUALIZACIÓN: 13 DE OCTUBRE DE 2012 ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK 2º DÍA – CONTACTO CON ENTITY FRAMEWORK CODE FIRST (SQL SERVER) INTEGRAR APLICACIÓN DEL 1º DÍA 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 versión (a finales de año) ya vendrá integrada. Los pasos son muy sencillos. Lo primero es crear una clase que herede de DbContext que hará de nexo entre nuestra aplicación y nuestra base de datos. Dentro de esta indicamos las tablas que se deben crear. Serán parámetros públicos del tipo DbSet<tabla>. public class BibliotecaContext : DbContext { public DbSet<Libro> Libros { get; set; } public DbSet<TipoLibro> TiposLibros { get; set; } } Ahora debemos crear una conexión 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 aplicación podemos acceder al global.asax y en Application_Start añadir un evento de inicialización. 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" }); } } Andrés Vallés Botella | Analista | Desarrollos propios Servicio de Informática | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | España http://si.ua.es/es 2 ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK Como os habréis fijado a los nombres de las tablas les ha añadido “es”. Por defecto pluraliza los nombres de las tablas, y en el caso del español 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 aplicación, el resultado es el mismo, pero la diferencia principal es que los datos no se almacenan en memoria como se hacía ayer, sino que realmente se están 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 aplicación, 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> Andrés Vallés Botella | Analista | Desarrollos propios Servicio de Informática | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | España http://si.ua.es/es 3 ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK ENTITY FRAMEWORK GESTIÓN 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 autonuméricas (Clave Primaria de Secuencia). Ahora creamos un disparador para cada tabla. Botón 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 relación entre las tablas. Botón derecho > Restricción > Agregar Clave Ajena… Andrés Vallés Botella | Analista | Desarrollos propios Servicio de Informática | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | España http://si.ua.es/es 4 ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK Por el momento no vamos a crear ni vistas ni paquetes. Lo haremos más adelante. Creamos un nuevo proyecto en el Visual Studio ASP.NET MVC 3 de tipo Internet Application. Lo llamamos CSI-BibliotecaBD. Sobre el proyecto botón 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 Andrés Vallés Botella | Analista | Desarrollos propios Servicio de Informática | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | España http://si.ua.es/es 5 ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK Ahora creamos una nueva conexión con la base de datos de desarrollo. Marcamos Sí, incluir datos confidenciales en la cadena de conexión y guardamos la configuración como EntitiesBiblioteca. Por últimos seleccionamos las tablas y le indicamos como espacio de nombres Models Se abrirá una pestaña con el esquema de las tablas. A primera vista vemos que ha identificado las claves principales de cada tabla y la relación entre ambas. Andrés Vallés Botella | Analista | Desarrollos propios Servicio de Informática | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | España http://si.ua.es/es 6 ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK 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. Botón 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 sólo nos crea los métodos como hacía la operación de ayer, añade la lógica para su gestión 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. Andrés Vallés Botella | Analista | Desarrollos propios Servicio de Informática | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | España http://si.ua.es/es 7 ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK Aquí se ve la potencia real de MVC y EF. Con un par de clics hemos creado una gestión completa de una tabla. Haríamos lo mismo para la otra tabla. Al controlador lo podríamos llamar TipoLibroController. Para poder gestionar ambas tablas desde el menú superior (ahora mismo sólo aparece Home y About). Abrimos la carpetas Views > Shared y seleccionamos el fichero _Layout.cshtml. Parece una página Web HTML pero incluye la nomenclatura de Razor. Nos fijamos en la zona de <ul> que se identifica como menu y añadimos dos opciones más. <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 añadamos, 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 debería quedar como la pantalla siguiente. Andrés Vallés Botella | Analista | Desarrollos propios Servicio de Informática | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | España http://si.ua.es/es 8 ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK 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. Mañana ya modificaremos nuestra aplicación para que los cambios sean comunes para todos los controladores que creemos Andrés Vallés Botella | Analista | Desarrollos propios Servicio de Informática | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | España http://si.ua.es/es 9 ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK RAZOR EN DETALLE MODELO En la mayoría 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 creación o edición) 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 código 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 común para todas las páginas de nuestro sitio. Por defecto al crear un proyecto MVC nos crea en la carpeta Views > Shared el fichero _Layout.cshtml. Esta página 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 Andrés Vallés Botella | Analista | Desarrollos propios Servicio de Informática | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | España http://si.ua.es/es 10 ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK o accediendo al código de la vista generado y añadido la línea 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 código 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 aplicación '/'. No se ha llamado al método "RenderBody" para la página de diseño "~/Views/Shared/_layout.cshtml". @SECTION Andrés Vallés Botella | Analista | Desarrollos propios Servicio de Informática | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | España http://si.ua.es/es 11 ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK Definimos una sección de código Razor / HTML que se insertará en el layout en caso de que se llame a @rendersection con el nombre de la sección que hayamos declarado. @section NombreSección { … } Si queremos definir una sección cabecera, en cada vista la definiríamos del siguiente modo. @section cabecera { <h1>Ejemplo de sección</h1> } @RENDERSECTION Incluimos en nuestra plantilla secciones o bloques de código Razor / HTML que se ha definido en la vista. Podemos indicar además si es obligatorio o no definirla. @RenderSection("NombreSección ", 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. Sección no definida: "cabecera". Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código. @RenderSection("cabecera", required:false) ISSECTIONDEFINED Por último para controlar si se ha definido la sección, disponemos de la función IsSectionDefined(). Siguiendo con el ejemplo de la cabecera podríamos 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">Título genérico</h1></div> } ETIQUETAS AVANZADAS @() En caso de que una variable, dentro del código, pueda provocar confusión, podemos usar @(variable). Por ejemplo <img src="images/"@model.foto.jpg" /> Andrés Vallés Botella | Analista | Desarrollos propios Servicio de Informática | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | España http://si.ua.es/es 12 ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK No podríamos afimar si está llamando a @model.foto y luego incorpora la extensión .jpg o que interprete que .jpg es una propiedad de @model.foto. Deberíamos 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 código Razor. <span> @if(true){ La hora es: @DateTime.Now } else { Aquí no se debería acceder nunca } </span> No sabe si es código HTML o código C#. Para definírselo anteponemos @: (si sólo es una línea) para decirle que es HTML <span> @if(true){ @:La hora es: @DateTime.Now } else { @:Aquí no se debería 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 página web en cada llamada. Con un layout por defecto o personalizado, pasando por el código generado por la vista y terminando con secciones opcionales o no. Andrés Vallés Botella | Analista | Desarrollos propios Servicio de Informática | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | España http://si.ua.es/es 13 ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK Esto no lo hace muy complicado de mantener y sobre todo poco flexible. Por eso existen las vistas parciales que permiten dividir la página en bloques más pequeños lo que las hace más fácil de gestionar. Puede ser muy útil en llamada AJAX porque el código 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 números es un método del controlador Home. Pasamos dos parámetros 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 vacía (que no tiene ni model, ni layout) @ViewBag.Suma ¿Cómo la llamamos? Lo normal es hacerlo como hasta ahora http://servidor/home/suma?numero1=5&numero2=7 pero como es lógico el propósito 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 algún elemento de la vista inicial con el contenido de la vista parcial. Incluimos el siguiente código en algún método de home La suma de 5 y 7 es: <span id="operacion"></span> Andrés Vallés Botella | Analista | Desarrollos propios Servicio de Informática | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | España http://si.ua.es/es 14 ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK <script type="text/javascript"> $(function(){ $("#operacion").load("/home/Suma?numero1=5&numero2=7"); }); </script> La primera línea pone un texto y prepara una etiqueta donde luego mostrar el resultado. Las siguientes líneas son javascript y JQuery. Esta librería 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 operación, 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 mostrábamos un listado de libros. Usamos el siguientes código 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, sería una buena solución 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 parámetros tenemos que usar el objeto Page y como propiedad lo que hayamos pasado, en este caso libro y trabaríamos con las propiedades de éste como si fuera el modelo. @{ var Model = Page.libro; } <div> <strong>Título: </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 página completa. HELPERS (BÁSICO) Los Helpers podríamos entenderlo como una forma de facilitar de reutilizar código que escribimos en muchas ocasiones. Andrés Vallés Botella | Analista | Desarrollos propios Servicio de Informática | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | España http://si.ua.es/es 15 ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK MVC nos ofrece de dos tipos: HTMLHelpers orientados a escribir código HTML. La mayoría de métodos 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 día 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 método que queramos llamar. Por ejemplo si queremos poner la ruta de nuestro fichero css, en el layout por defecto hace uso del método Content de URLHelper. <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> La integración es muy sencilla porque no debemos hacer ninguna referencia externa y dispone de intellisense lo que facilita su escritura. Los 4 métodos que lo forman son Action(s:action, s:controller, …) Genera la dirección completa de la llamada a un método / acción de un controlador. Por ejemplo si queremos crear un enlace a Acerca de, podríamos usar el siguiente código HTML <a href="@Url.Action("About", "Home")">Acerca de</a> Si queremos hacer una llamada a un método Buscar al que le pasemos el término de búsqueda, incluiríamos un tercer campo, con los parámetros que queramos personalizar. <a href="@Url.Action("Buscar", "Home", new { busqueda = "Servicio de Informática" })">Buscar por "Servicio de Informática"</a> Si el método permite la recepción del parámetro “busqueda”, entonces lo podríamos usar. public ActionResult Buscar(string busqueda) { ViewBag.Search = busqueda; return View(); } Content(s:path) Convierte una dirección virtual / relativa en su correspondiente dirección absoluta de la aplicación. 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" /> Andrés Vallés Botella | Analista | Desarrollos propios Servicio de Informática | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | España http://si.ua.es/es 16 ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK Encode(s:url) Codifica los caracteres especiales de una URL por sus equivalentes caracteres estándar. Se usa para evitar problemas con ciertos navegadores que no interpretan los caracteres especiales. En el ejemplo anterior el envío de “Servicio de Informática” sería uno de los casos que nos podrían dar errores por os espacios y acento. <a href="@Url.Action("Buscar", "Home", new { busqueda = Url.Encode("Servicio de Informática") })">Buscar por "Servicio de Informática"</a> La dirección 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 parámetros que queramos en un único parámetro, de la siguiente manera new { Controller = “…”, Action = “…”, …} La misma llamada Acerca de pero con RouteUrl sería. <a href="@Url.RouteUrl(new {Controller = "Home", Action = "About"})">Acerca de</a> Si queremos pasar también el campo de búsqueda (o el id) <a href="@Url.RouteUrl(new {Controller = "Home", Action = "Buscar", busqueda = "Servicio de Informática" })">Buscar por "Servicio de Informática"</a> Mañana nos centraremos en los HTMLHelpers y veremos como crear los nuestros propios. COMPRENDIENDO LAS VISTAS POR DEFECTO Ahora que ya tenemos más 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 PÁGINA WEB A PLANTILLA EJEMPLO DE PREGUNTAS Y RESPUESTAS (FAQS) Vamos a usar la página Dynamic FAQ Section w/ jQuery, YQL & Google Docs | Tutorialzine Demo (http://tutorialzine.com/2010/08/dynamic-faq-jquery-yql-google-docs/) como plantilla de trabajo para nuestro ejemplo. Andrés Vallés Botella | Analista | Desarrollos propios Servicio de Informática | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | España http://si.ua.es/es 17 ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK La diferencia está en la forma en que obtiene los datos. En esta página 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 página web, una hoja de estilo y un documento javascript. Los 3 están en una misma carpeta raíz. Para seguir el formato que sugiere ASP.NET, debería 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 método Index de HomeController para que muestre algunas preguntas y respuestas. Realizarlo con secciones y con un modelo personalizado. EJEMPLO PRÁCTICO DESARROLLO COMPLETO CON EF DE UNA APLICACIÓN 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 número que pospondrá al nombre de la tabla. La ordenación la haremos basándonos en el listado de alumnos que se dispone de Selección y Formación. En mi caso la tabla se llama FAQ_00. Crear la tabla e incluirla en el proyecto MVC. Crear el controlador para su gestión y modificar el método Index de HomeController para que muestre los datos de la tabla. Andrés Vallés Botella | Analista | Desarrollos propios Servicio de Informática | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | España http://si.ua.es/es 18 ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK SELECCIÓN DE PROYECTO El objetivo de este curso es que sea lo más práctico posible. Por eso durante cada una de las sesiones se dedicará un tiempo para trabajar en un proyecto al que cada día se incorporará lo que se vea durante la sesión. 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 formarán 3 grupos al que se le asignará a cada persona una tarea. PRESENTACIÓN DE PROYECTOS Catalogo de recursos o enlaces Agenda Universitaria Gestión de peticiones / incidencias Autocolega Se han seleccionado éstos porque son proyectos muy utilizados actualmente en la UA y está desarrollados con una programación muy desfasada y difícil de mantener / actualizar. En todos los proyectos se analizará la posibilidad de mantener la información actual, respetando la estructura o creando una nueva con posibilidades de migrar los datos (2 de ellas están desarrolladas en SQL Server y sería 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 ningún problema. CREACIÓN DE 4/8 GRUPOS Dependiendo de las personas que asistan a clase se puede ampliar/reducir el número de grupos. La idea es que al menos cada grupo lo formen 2/6 personas para poder adelantar en todas las tareas, diseño, gestión y base de datos. REPARTIR TAREAS Las tareas se pueden corresponder con cada uno de los módulos del MVC, es decir uno se puede encargar del modelado, otro del aspecto visual y otro de los controladores. Cada día 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 más generales que hayan surgido. Si la cosa se complica, por correo se me envían las sugerencias / incidencias y las analizo para la siguiente clase. El último día cada grupo presentará su proyecto al resto de la clase (no será más de 10 minutos por proyecto). Ya explicaré más adelante los puntos a presentar. Andrés Vallés Botella | Analista | Desarrollos propios Servicio de Informática | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | España http://si.ua.es/es 19
Similar documents
ASP.NET MVC 3 y 4 - Servicio de Informática
ASP.NET sólo nos permitía trabajar con Webforms. El objetivo de este curso es dar a conocer otra filosofía de trabajo, que por una parte nos dará la sensación de que volvemos al pasado (perdemos to...
More information