Manual de Desarrollo Servicio Web I
Manual de Desarrollo Servicio Web I
Manual de Desarrollo Servicio Web I
Servicio Web I
DESARROLLO DE SERVICIO WEB I 2
ÍNDICE
Presentación 5
Red de contenidos 7
Unidad I: INTRODUCCION AL DESARROLLO WEB
1.1 : ASP.NET MVC 11
1.1.1 : Plataforma ASP.NET MVC 12
1.1.2 : Controladores 13
1.1.3 : URL de Enrutamiento 13
1.1.4 : Implementando acciones (POST/GET) 14
1.1.5 : Vistas 15
1.1.6 : Sintaxis Razor y Scaffolding 16
1.1.7 : ViewData yViewBag 17
Unidad II: TRABAJANDO CON DATOS EN ASP.NET MVC
2.1 : Recuperando datos desde un origen de datos en ADO.NET 31
2.1.1 : ADO.NET, arquitectura y proveedores 31
2.1.2 : Manejo de la cadena de conexión de un origen de datos: 34
ConfigurationManager
2.1.3 : Clase DataReader, métodos y propiedades 35
2.1.4 : Paginación de los datos recuperados 36
2.2 : Manipulación de datos desde un origen de datos en ADO.NET 53
2.2.1 : Operaciones de actualización sobre un origen de datos: Clase 53
Command
2.2.2 : Clase Command, métodos y propiedades 53
2.2.3 : Uso de la clase File y HttpPostFile para la actualización de 56
datos e imágenes
2.2.4 : Manejo de transacciones: Clase Transaction 57
Unidad III: IMPLEMENTANDO E-COMMERCE EN ASP.NET MVC
3.1 : Implementando una aplicación e-commerce 81
PRESENTACIÓN
REDDECONTENIDOS
Implement AngularJS
ando una
aplicación
e-
commerce
UNIDAD DE
APRENDIZAJE
INTRODUCCION AL
DESARROLLO WEB
LOGRO DE LA UNIDAD DE APRENDIZAJE
TEMARIO
ACTIVIDADES PROPUESTAS
ASP.NET MVC nace como una opción para hacer frente al ya consagrado y alabado
Ruby on Rails un framework que procura hacer uso de buenas practicas de
programación como la integración de Unit tests o la separación clara de ocupaciones,
dándonos casi todos los beneficios otorgados por Ruby on Rails y sumando el gran y
prolijo arsenal proporcionado por .NET.
Entre las características más destacables de ASP.NET MVC tenemos las siguientes:
Figura: 1
Ref: https://jjestruch.wordpress.com/2012/02/21/arquitectura-ddd-domain-driven-design-asp-net-
mvc/
usar ASP.NET web form cuando hagamos aplicaciones simples donde el factor
primordial sea el tiempo.
Referencia: http://codigobase.com/el-porque-del-mvc-modelo-vista-controlador
Facilidad de mantenimiento
Facilidad para realizar testeo unitario y desarrollo orientado a pruebas.
URLs limpias, fáciles de recordar y adecuadas para buscadores.
Control absoluto sobre el HTML resultante generado, con la posibilidad de crear
webs "responsive" usando plantillas del framework Bootstrap de forma nativa.
Potente integración con jQuery y otras bibliotecas JavaScript.
Magnífico rendimiento y escalabilidad
Gran extensibilidad y flexibilidad
1.1.2. Controladores
El marco de ASP.NET MVC asigna direcciones URL a las clases a las que se hace
referencia como controladores. Los controladores procesan solicitudes entrantes,
controlan los datos proporcionados por el usuario y las interacciones y ejecutan la
lógica de la aplicación adecuada. Normalmente, una clase controlador llama a un
componente de vista independiente para generar el marcado HTML para la solicitud.
Por defecto, cuando cree una aplicación ASP.NET MVC, se define una tabla de
enrutamiento que se encarga de decidir qué controlador gestiona cada petición Web
basándose en la URL de dicha petición. Esta forma de enrutamiento presenta dos
grandes ventajas con respecto a las aplicaciones tradicionales de ASP.NET:
En cada petición URL, no se asigna un archivo físico del disco como una página .aspx,
sino que se asigna una acción de un controlador (más un parámetro), que nos muestra
una vista específica.
La tabla de enrutamiento que se genera por defecto al crear una aplicación ASP.NET
MVC, la cual se encuentra en archivo RouteConfig.cs de la carpeta App_Start.
Cuando se envíe el formulario vía POST, puede obtener los datos y realizar
operaciones. La realidad es que una acción puede estar implementada por un solo
método por cada verbo HTTP, eso significa que para la misma acción (por lo tanto, la
misma URL) puedo tener dos métodos en el controlador: uno que se invoque a través
de GET y otro que se invoque a través de POST. Así pues, puede añadir el siguiente
método a nuestro controlador.
1.1.5. Vistas
Las vistas en MVC ofrecen tres características adicionales de las cuales se puede
especificar: Create a strongly-typed view, Create as a parcial view y Use a layout or
master page
Razor es una sintaxis basada en C# que permite usarse como motor de programación
en las vistas o plantillas de nuestros controladores. No es el único motor para trabajar
con ASP.NET MVC. Entre los motores disponibles destaco los más conocidos: Spark,
NHaml, Brail, StringTemplate o NVelocity, algunos de ellos son conversiones de otros
lenguajes de programación. En Razor, el símbolo de la arroba (@) marca el inicio de
código de servidor.
Los scaffolds generan páginas que se pueden usar y por las que se puede navegar,
es decir, implica la construcción de páginas CRUD. Los resultados que se aplica es
ofrecer una funcionalidad limitada.
Cuando tiene la clase del modelo listo, Scaffolding y la Vista permite realizar CRUD
(Create, Read, Update, Delete) operaciones. Todo lo que necesita hacer es seleccionar
la plantilla scafold y el modelo de datos para generar los métodos de acción que se
implementarán en el controlador.
Cuando se usa Model para acceder a los datos, en lugar de ViewData o ViewBag,
defina en la primera línea, @model. Esa línea le indica al framework de que tipo es el
objeto que la vista recibe del controlador (es decir, de que tipo es la propiedad Model).
Laboratorio 1.1
Creando una aplicación ASP.NET MVC
Implemente un proyecto ASP.NET MVC aplicando el patrón arquitectónico MVC donde permita
crear una página de inicio de un sitio web.
Creando el proyecto
Iniciamos Visual Studio 2019 y creamos un nuevo proyecto:
1. Seleccionar el proyecto Web Visual Studio 2019, selecciona la opción CREAR UN
PROYECTO
Selecciona
Selecciona
Nombre y ubicación
del proyecto
4. Para finalizar, selecciona el patrón MVC, tal como se muestra. Presiona el botón
CREAR
Selecciona MVC
A continuación definimos estilos a las etiquetas que utilizará las páginas cshtml.
Agregar el archivo
librería.js
En el body del _Layout, diseña los bloques <header> y <nav> la cual se visualizará en
todas las páginas que utilicen esta pagina maestra. Guardar los cambios efectuados en
el archivo.
Bloque <header>
Bloque <nav>
Bloque Render
Selecciona el controlador
en blanco
Nombre de la Vista, la
plantilla es vacía
Agrega enlace a la
hoja de estilo
Ejecute proyecto, presiona la tecla Ctrl + F5, donde se visualiza la Vista y su diseño a
través de la pagina.
Resumen
ASP.NET MVC es una implementación reciente de la arquitectura Modelo-Vista-
Controlador sobre la base ya existente del Framework ASP.NET otorgándonos de esta
manera un sin fin de funciones que son parte del ecosistema del Framework .NET.
Entre las características más destacables de ASP.NET MVC tenemos las siguientes:
Uso del patrón Modelo-Vista-Controlador.
Facilidad para el uso de Unit Tests.
Uso correcto de estándares Web y REST.
Sistema eficiente de routing de links.
Control a fondo del HTML generado.
Uso de las mejores partes de ASP.NET.
ASP.NET MVC es la plataforma de desarrollo web de Microsoft basada en el conocido
patrón Modelo-Vista-Controlador. Está incluida en Visual Studio y aporta interesantes
características a la colección de herramientas del programador Web.
Cuando cree una aplicación ASP.NET MVC se define una tabla de enrutamiento que se
encarga de decidir que controlador gestiona cada petición Web basándose en la URL de
dicha petición.
En el modelo Model-View-Controller (MVC), las vistas están pensadas exclusivamente
para encapsular la lógica de presentación. No deben contener lógica de aplicación, ni
código de recuperación de base de datos. El controlador debe administrar toda la lógica de
aplicación. Una vista representa la interfaz de usuario adecuada usando los datos que
recibe del controlador.
Scaffolding implica la creación de plantillas a través de los elementos del proyecto a través
de un método automatizado.
Razor es una sintaxis basada en C# que permite usarse como motor de programación en
las vistas de nuestros controladores. No es el único motor para trabajar con ASP.NET
MVC.
Si desea saber más acerca de estos temas, puede consultar las siguientes páginas.
o http://www.vitaminasdev.com/Recursos/8/asp-net-mvc-vs-asp-net-webforms
o http://librosweb.es/libro/jobeet_1_4/capitulo_4/la_arquitectura_mvc.html
o http://www.devjoker.com/contenidos/articulos/525/Patron-MVC-Modelo-Vista-
Controlador.aspx
o https://msdn.microsoft.com/es-es/library/dd381412(v=vs.108).aspx
o https://amatiasbaldi.wordpress.com/2012/05/16/microsoft-mvc4/
o http://www.forosdelweb.com/f179/jquery-c-mvc-crear-objeto-json-enviarlo-action-del-
controlador-1082637/
o http://www.mug-it.org.ar/343016-Comunicando-cliente-y-servidor-con-jQuery-en-ASPnet-
MVC3.note.aspx
o https://danielggarcia.wordpress.com/2013/11/12/el-controlador-en-asp-net-mvc-4-i-enrutado/
o http://www.desarrolloweb.com/articulos/pasar-datos-controladores-vistas-dotnet.html
UNIDAD DE
APRENDIZAJE
TEMARIO
ACTIVIDADES PROPUESTAS
Arquitectura de ADO.NET
Componentes de ADO.NET
LINQ to SQL
ADO.NET Entity Framework está diseñado para permitir que los desarrolladores creen
aplicaciones de acceso a los datos programando en un modelo de aplicación
conceptual en lugar de programar directamente en un esquema de almacenamiento
relacional. El objetivo es reducir la cantidad de código y mantenimiento que se necesita
para las aplicaciones orientadas a datos
Describe cómo se usa Servicios de datos de WCF para implementar servicios de datos
en web o en una intranet. Los datos se estructuran como entidades y relaciones de
acuerdo con las especificaciones de Entity Data Model. Los datos implementados en
este modelo se pueden direccionar mediante el protocolo HTTP estándar
XML Y ADO.NET
Los proveedores de datos .NET Framework sirven para conectarse a una base de
datos, ejecutar comandos y recuperar resultados. Esos resultados se procesan
directamente, se colocan en un DataSet con el fin de que el usuario pueda verlos
cuando los necesite, se combinan con datos de varios orígenes o se utilizan de forma
remota entre niveles. Los proveedores de datos .NET Framework son ligeros, de
manera que crean un nivel mínimo entre el origen de datos y el código, con lo que
aumenta el rendimiento sin sacrificar funcionalidad.
Objeto Descripción
Connection Establece una conexión a una fuente de datos. La
clase base para todos los objetos Connection es
DbConnection.
Command Ejecuta un comando en una fuente de datos.
Expone Parameters y puede ejecutarse en el
ámbito de un objeto Transaction desde
Connection. La clase base para todos los objetos
Command es DbCommand.
DataReader Lee un flujo de datos de solo avance y solo lectura
desde una fuente de datos. La clase base para
todos los objetos DataReader es DbDataReader.
DataAdapter Llena un DataSet y realiza las actualizaciones
necesarias en una fuente de datos. La clase base
para todos los objetos DataAdapter es
DbDataAdapter.
Ref: https://docs.microsoft.com/es-es/dotnet/framework/data/adonet/data-providers
Objeto Descripción
Transaction Incluye operaciones de actualización en las
transacciones que se realizan en el origen de datos.
ADO.NET es también compatible con las
transacciones que usan clases en el espacio de
nombres System.Transactions.
CommandBuilder Un objeto auxiliar que genera automáticamente las
propiedades de comando de un DataAdapter o que
obtiene de un procedimiento almacenado
información acerca de parámetros con la que puede
rellenar la colección Parameters de un objeto
Command.
Parameter Define los parámetros de entrada y salida para los
comandos y procedimientos almacenados
ConnectionStringBuilder Un objeto auxiliar que proporciona un modo sencillo
de crear y administrar el contenido de las cadenas
de conexión utilizadas por los objetos Connection.
Exception Se devuelve cuando se detecta un error en el
origen de dato
ClientPermission Se proporciona para los atributos de seguridad de
acceso del código de los proveedores de datos
Ref: https://docs.microsoft.com/es-es/dotnet/framework/data/adonet/data-providers
DATASET EN ADO.NET
Figura 2: DataSet
Referencia: edn.embarcadero.com
Para conectarse a Microsoft SQL Server 7.0 o posterior, utilice el objeto SqlConnection
del proveedor de datos .NET Framework para SQL Server. El proveedor de datos
.NET Framework para SQL Server admite un formato de cadena de conexión que es
similar al de OLE DB (ADO).
cn.Open()
Donde
Data Source: Origen de datos
Initial Catalog=Nombre de la base de datos
User id=usuario
Pwd=clave
Debe cerrar siempre el objeto Connection cuando deje de usarlo. Esta operación se
puede realizar mediante los métodos Close o Dispose del objeto Connection.
La recuperación de datos mediante DataReader implica crear una instancia del objeto
Command y de un DataReader a continuación, para lo cual se llama a
Command.ExecuteReader a fin de recuperar filas de un origen de datos.
Se puede utilizar el método Read del objeto DataReader para obtener una fila a partir
de los resultados de una consulta. Para tener acceso a cada columna de la fila
devuelta, puede pasar a DataReader el nombre o referencia numérica de la columna en
cuestión. Sin embargo, el mejor rendimiento se logra con los métodos que ofrece
DataReader y que permiten tener acceso a los valores de las columnas en sus tipos de
datos nativos (GetDateTime, GetDouble, GetGuid, GetInt32, etc.).
Para obtener una lista de métodos de descriptor de acceso con tipo para DataReaders
de proveedores de datos:
Proveedor Descripción
OledbDataReader Proveedor de datos para OLEDB
SqlDataReader Proveedor de datos para SQL Server
OdbcDataReader Proveedor de datos para ODBC
OracleDataReader Proveedor de datos para Oracle
Ref: https://docs.microsoft.com/es-es/dotnet/framework/data/adonet/retrieving-data-using-a-datareader
DataTable contiene una fila por cada una de las columnas del conjunto de resultados.
Cada columna de una fila de la tabla de esquema está asociada a una propiedad de la
columna que se devuelve en el conjunto de resultados. ColumnName es el nombre de
la propiedad y el valor de la columna es el de la propiedad. En el ejemplo de código
siguiente se muestra la información del esquema de DataReader.
Figura: Paginación
Referencia: https://sitechecker.pro/es/pagination/
En el flujo de trabajo típico de una aplicación web de MVC, los métodos de acción de
controlador administran una solicitud web de entrada. Estos métodos de acción usan
los valores de parámetro de entrada para ejecutar el código de aplicación y recuperar o
actualizar los objetos del modelo de datos de una base de datos.
Soluciones a nivel de concepto y de diseño sobre una paginación para una web
concreta puede haber muchas. Este apunte pretende únicamente mostrar algunos
ejemplos recogidos de ciertas webs: qué elementos son comunes y cuáles originales e
interesantes. A partir de ahí, cada cual puede meditar la solución más adecuada para
su web.
Laboratorio 2.1
Consultando datos desde una aplicación ASP.NET MVC
Implemente un proyecto ASP.NET MVC donde permita listar los registros de la tabla
tb_productos desde la web.
Selecciona la
opción
Selecciona el
elemento
Asigne su nombre
A continuación, defina los atributos de la clase Cliente, asigne el titulo a cada atributo, tal como
se muestra
Librería de
notaciones
Defina los
atributos
Abrir el web.config y defina la cadena de conexión llamada cnx, tal como se muestra. Utilice la
etiqueta <connectionStrings>
Defina la cadena
de conexión
Seleccionar
Conexión
A continuación, defina un método de tipo numerable donde liste los clientes, tal como se
muestra
Definir el método
En la ventana Agregar Vista, aparece el nombre de la Vista: Index, selecciona la plantilla: List y
la clase de modelo Cliente. Presionar el botón Agregar
Selecciona la plantilla y
el modelo
Laboratorio 2.2
Consulta con paginación en ASP.NET MVC
Del proyecto ASP.NET MVC anterior, crea una consulta que permita listar los registros de la
tabla tb_pedidoscabe, listando los registros a 15 registros por página.
Clase Pedido
Referencia a Librerias
A continuación, defina el metodo para listar los registros de tb_pedidoscabe, donde se ingresa
como parámetro el nombre del procedure
Metodo listado
ActionResult
paginacion
A continuación implementamos el proceso del listado a través de una etiqueta <table>, tal
como se muestra. Para leer cada registro utilizamos el comando foreach para visualizar cada
registro.
Guarde el proyecto y ejecuta la pagina Ctrl + F5, donde se visualiza la Vista con su paginación
respectiva.
Laboratorio 2.3
Consulta con paginación en ASP.NET MVC
Del proyecto ASP.NET MVC anterior, crea una consulta que permita listar los registros de la
tabla tb_pedidoscabe por un determinado año del campo fechapedido, listando los registros a
15 registros por página.
Referencia a Librerias
Defina un método llamado listado, donde reciba como parámetro el nombre del procedure y la
lista de parámetros, el cual retorna los registros de la consulta
Defina el ActionResult donde envía a la vista los registros de pedidos por año, paginando su
resultado.
Agrega la vista del Action, defina un formulario donde defina un TextBox llamado “y” y al
finalizar la lista, defina la numeración de la paginación del filtro
Formulario
Paginación
Guarde la Vista, para ejecutar presiona Ctrl + F5, ingrese el año, al presionar el botón
Procesar, visualizamos los registros y los botones de la paginación.
Resumen
Cuando desarrolle aplicaciones con ADO.NET, contará con diferentes requisitos para
trabajar con datos. En algunos casos, puede que simplemente desee realizar una consulta
de datos en un formulario; en otros casos necesita actualizar los datos.
Los dos componentes principales de ADO.NET para el acceso a datos y su manipulación
son los proveedores de datos .NET Framework y DataSet.
Los proveedores de datos .NET Framework sirven para conectarse a una base de datos,
ejecutar comandos y recuperar resultados. Esos resultados se procesan directamente, se
colocan en un DataSet con el fin de que el usuario pueda verlos cuando los necesite, se
combinan con datos de varios orígenes o se utilizan de forma remota entre niveles.
En ADO.NET, se utiliza un objeto Connection para conectar con un determinado origen de
datos mediante una cadena de conexión en la que se proporciona la información de
autenticación necesaria. El objeto Connection utilizado depende del tipo de origen de
datos.
La recuperación de datos mediante DataReader implica crear una instancia del objeto
Command y de un DataReader a continuación, para lo cual se llama a
Command.ExecuteReader a fin de recuperar filas de un origen de datos
Se puede utilizar el método Read del objeto DataReader para obtener una fila a partir de
los resultados de una consulta. Para tener acceso a cada columna de la fila devuelta,
puede pasar a DataReader el nombre o referencia numérica de la columna en cuestión.
La paginación en sitios web es una forma de estructurar el contenido, agrupándolo por una
cantidad fija de elementos o registros. La paginación es simplemente el número de páginas
que se muestran en la parte inferior de una página web que sirve para separar el contenido
y facilitar la navegación.
En el flujo de trabajo típico de una aplicación web de MVC, los métodos de acción de
controlador administran una solicitud web de entrada. Estos métodos de acción usan los
valores de parámetro de entrada para ejecutar el código de aplicación y recuperar o
actualizar los objetos del modelo de datos de una base de datos.
Si desea saber más acerca de estos temas, puede consultar las siguientes páginas.
http://www.vitaminasdev.com/Recursos/8/asp-net-mvc-vs-asp-net-webforms
http://librosweb.es/libro/jobeet_1_4/capitulo_4/la_arquitectura_mvc.html
http://www.devjoker.com/contenidos/articulos/525/Patron-MVC-Modelo-Vista-
Controlador.aspx
https://msdn.microsoft.com/es-es/library/dd381412(v=vs.108).aspx
https://amatiasbaldi.wordpress.com/2012/05/16/microsoft-mvc4/
http://www.forosdelweb.com/f179/jquery-c-mvc-crear-objeto-json-enviarlo-action-del-
controlador-1082637/
http://www.mug-it.org.ar/343016-Comunicando-cliente-y-servidor-con-jQuery-en-
ASPnet-MVC3.note.aspx
https://danielggarcia.wordpress.com/2013/11/12/el-controlador-en-asp-net-mvc-4-i-
enrutado/
http://www.desarrolloweb.com/articulos/pasar-datos-controladores-vistas-dotnet.html
UNIDAD DE
APRENDIZAJE
TEMARIO
ACTIVIDADES PROPUESTAS
Una vez establecida una conexión a un origen de datos, puede ejecutar comandos y
devolver resultados desde el mismo mediante un objeto DbCommand.
Para crear un comando, puede utilizar uno de los constructores de comando del
proveedor de datos .NET Framework con el que esté trabajando. Los constructores
pueden aceptar argumentos opcionales, como una instrucción SQL para ejecutar en el
origen de datos, un objeto DbConnection o un objeto DbTransaction. También puede
configurar dichos objetos como propiedades del comando. También puede crear un
comando para una determinada conexión mediante el método CreateCommand de un
objeto DbConnection. La instrucción SQL que ejecuta el comando se puede configurar
mediante la propiedad CommandText.
Proveedor Descripción
OledbCommand Proveedor de datos para OLEDB
SqlCommand Proveedor de datos para SQL Server
OdbcCommand Proveedor de datos para ODBC
OracleCommand Proveedor de datos para Oracle
Cada uno de estos objetos expone métodos para ejecutar comandos que se basan en
el tipo de comando y el valor devuelto deseado, tal como se describe en la tabla
siguiente:
Valor Descripción
CommandBehavior.CloseConnection Se utiliza para cerrar la conexión en forma
automática, tan pronto como el dataReader
es cerrado.
CommandBehavior.SingleResult Retorna un único conjunto de resultados
Valor Descripción
CommandBehavior.SingleRow Retorna una fila
Ref: https://docs.microsoft.com/en-us/dotnet/api/system.data.common.dbcommand?view=netframework-
4.8
Aunque es cierto que para llamar a un procedimiento almacenado basta con pasar en
forma de instrucción SQL su nombre seguido de los argumentos de parámetros, el uso
de la colección Parameters del objeto DbCommand de ADO.NET permite definir más
explícitamente los parámetros del procedimiento almacenado, y tener acceso a los
parámetros de salida y a los valores devueltos.
El proveedor de datos de .NET Framework para SQL Server no admite el uso del
marcador de posición de signo de interrogación de cierre (?) para pasar parámetros a
una instrucción SQL o a un procedimiento almacenado. Este proveedor trata los
parámetros del procedimiento almacenado como parámetros con nombre y busca
marcadores de parámetros coincidentes.
El método Add acepta como entrada argumentos del constructor o cualquier objeto de
parámetro ya existente, en función del proveedor de datos.
Las instrucciones SQL que modifican datos (por ejemplo INSERT, UPDATE o DELETE)
no devuelven ninguna fila. De la misma forma, muchos procedimientos almacenados
realizan alguna acción pero no devuelven filas. Para ejecutar comandos que no
devuelvan filas, cree un objeto Command con el comando SQL adecuado y una
Connection, incluidos los Parameters necesarios. El comando se debe ejecutar con el
método ExecuteNonQuery del objeto Command.
En primer lugar debemos crear un formulario donde hagamos uso del tag input con el
type=”file”. Además necesitamos especificar a nivel de formulario el atributo enctype.
Este atributo indica el tipo de contenido que se va a enviar al servidor. Como nos
cuentan en la página oficial de W3, cuando el método utilizado es post el valor por
defecto de este atributo es “application/x-www-form-urlencoded”. Sin embargo, si
necesitamos hacer uso del elemento input de tipo file debemos modificar este valor por
“multipart/form-data”.
@using(Html.BeginForm(method="post"enctype="multipart/form-data"
action= "metodo"))
{
}
Cuando realiza pruebas unitarias, generalmente usa una clase derivada para
implementar miembros que tienen un comportamiento personalizado que cumple con el
escenario que está probando.
Propiedades
ContentLength Obtiene el tamaño de un archivo cargado, en
bytes.
ContentType Obtiene el tipo de contenido MIME de un archivo
cargado.
FileName Obtiene el nombre completo del archivo en el
cliente.
Metodos
SaveAs(String) Guarda el contenido de un archivo cargado.
ToString() Devuelve una cadena que representa el objeto
actual.
Ref: https://docs.microsoft.com/en-us/dotnet/api/system.web.httppostedfilebase?view=netframework-4.8
Este es el método de acción que publicará esta vista que guarda el archivo en un
directorio en la carpeta App_Data llamado " App_Data ".
BEGIN TRANSACTION
Se utiliza para finalizar una transacción correctamente si no hubo errores. Todas las
modificaciones de datos realizadas en la transacción se convierten en parte
permanentes de la base de datos. Se liberan los recursos ocupados por la transacción.
Se utiliza para eliminar una transacción en la que se encontraron errores. Todos los
datos modificados por la transacción vuelven al estado en el que estaban al inicio de la
transacción. Se liberan los recursos ocupados por la transacción.
Cada proveedor de datos de .NET Framework tiene su propio objeto Transaction para
realizar transacciones locales. Si necesita que se realice una transacción en una base
de datos de SQL Server, seleccione una transacción de System.Data.SqlClient. En
transacciones de Oracle, utilice el proveedor System.Data.OracleClient. Además, existe
una nueva clase DbTransaction disponible para la escritura de código independiente
del proveedor que requiere transacciones.
Una transacción implícita inicia una nueva transacción en una conexión a SQL Server
Database Engine (Motor de base de datos de SQL Server) después de confirmar o
revertir la transacción actual. No tiene que realizar ninguna acción para delinear el
inicio de una transacción, sólo tiene que confirmar o revertir cada transacción. El modo
de transacciones implícitas genera una cadena continua de transacciones.
La transacción sigue activa hasta que emita una instrucción COMMIT o ROLLBACK.
Una vez que la primera transacción se ha confirmado o revertido, la instancia Motor de
base de datos inicia automáticamente una nueva transacción la siguiente vez que la
conexión ejecute una de estas instrucciones. La instancia continúa generando una
cadena de transacciones implícitas hasta que se desactiva el modo de transacciones
implícitas.
Laboratorio 3.1
Actualizacion de datos en ASP.NET MVC
Implemente un proyecto ASP.NET MVC donde permita actualizar los registros de la tabla
tb_vendedor, los cuales se encuentra almacenado en la base de datos negocios2020
Clase Vendedor
Clase Pais
Referencias a las
librerías
A continuación, defina los métodos de tipo IEnumerable, los cuales retornan los registros de las
tablas tb_paises y tb_vendedores.
En esta imagen, retornamos los registros de la tabla tb_paises, tal como se muestra
ActionResult Index()
Defina el ActionResult, el cual envía a la vista la lista de los registros de tb_vendedor a través
del metodo vendedores.
ActionResult Index()
A continuación, agrega la vista del ActionResult Index() y presiona la tecla F5 donde ejecute la
pagina, visualizando la lista de los registros.
Actualización de datos
Para desarrollar este proceso, defina un metodo llamado CRUD, el cual recibe como parámetro
el nombre del procedure y la lista de parámetros, ejecutando una operación de actualización:
Insert, Delete, Update, tal como se muestra.
Metodo CRUD
ActionResult Create
A continuación, defina el ActionResult Create(), tipo GET, el cual envía a la pagina los países y
un nuevo Vendedor()
ActionResult GET
Defina el ActionResult Create(), tipo POST, el cual reciben el registro de Vendedor, y ejecuta el
metodo CRUD.
DropDown de paises
ViewBag.mensaje
Ejecuta la vista, para agregar registros a la tabla tb_Vendedor, tal como se muestra.
ActionResult Edit
Defina el ActionResult Edit(), tipo GET, el cual envía a la pagina el vendedor seleccionado
desde el Index. Además enviamos la lista de países con el país seleccionado desde el
ViewBag.
Defina el ActionResult Edit(), tipo POST, el cual reciben el registro de Vendedor, y ejecuta el
metodo CRUD para actualizar los datos del Vendedor seleccionado
Vista Edit
DropDown de paises
El DbContext del modelo (Negocios2017.Context.cs), expone cada uno de los DbSet de las
ViewBag.mensaje
tablas que conforman el modelo, tal como se muestra
Ejecuta la vista Index, selecciona un Vendedor desde la opción Edit, donde se direcciona a la
Vista Edit, cambie los datos y presiona el botón Save para actualizar los datos.
Laboratorio 3.2
Actualización de datos con imágenes en ASP.NET MVC
En el mismo proyecto ASP.NET MVC realice el ingreso de datos de la tabla tb_usuario, donde
en dicho registro almacena la dirección de su foto (imagen).
SOLUCION
En la base de datos, crea la tabla tb_usuario, tal como se muestra.
Tabla tb_usuario
Clase Usuario
Referencias a las
librerías
A continuación, defina el método de tipo IEnumerable, los cuales retornan los registros de las
tablas tb_usuario, tal como se muestra
ActionResult Index()
Defina el ActionResult, el cual envía a la vista la lista de los registros de tb_usuario a través del
metodo usuarios().
ActionResult Index()
A continuación, agrega la vista del ActionResult Index(). Realice algunos cambios al diseño de
la vista.
Defina la class
.imgfoto
Visualizar la foto
Actualización de datos
Para desarrollar este proceso, defina un metodo llamado CRUD, el cual recibe como parámetro
el nombre del procedure y la lista de parámetros, ejecutando una operación de actualización:
Insert, Delete, Update, tal como se muestra.
Metodo CRUD
ActionResult Create
A continuación, defina el ActionResult Create(), tipo GET, el cual envía un nuevo Usuario()
ActionResult GET
Defina el ActionResult Create(), tipo POST, el cual reciben el registro de Usuario, y ejecuta el
metodo CRUD.
A continuación, agrega la vista del ActionResult Create(), realizar las modificaciones de la vista
ViewBag.mensaje
Ejecuta la vista, para agregar registros a la tabla tb_Usuario, tal como se muestra.
Resumen
Las instrucciones SQL que modifican datos (por ejemplo INSERT, UPDATE o DELETE) no
devuelven ninguna fila. De la misma forma, muchos procedimientos almacenados realizan
alguna acción pero no devuelven filas.
Para ejecutar comandos que no devuelvan filas, cree un objeto Command con el comando
SQL adecuado y una Connection, incluidos los Parameters necesarios. El comando se
debe ejecutar con el método ExecuteNonQuery del objeto Command.
Cada proveedor de datos .NET Framework incluido en .NET Framework dispone de su
propio objeto command que hereda de DbCommand. El proveedor de datos .NET
Framework para para SQL Server incluye un objeto SqlCommand.
Cada objeto Command fuertemente tipado admite también una enumeración
CommandType que especifica cómo se interpreta una cadena de comando
Desarrollar una aplicación que nos permita subir archivos a un servidor desde un
explorador Web es un proceso bastante sencillo, ya que la etiqueta <input type="file" />
hace prácticamente todo el trabajo por nosotros en lo que se refiere a la parte del "front-
end".
La clase HttpPostedFileBase es una clase abstracta que contiene los mismos miembros
que la clase HttpPostedFile. La clase HttpPostedFileBase le permite crear clases
derivadas que son como la clase HttpPostedFile, pero que puede personalizar y que
funcionan fuera de la tubería ASP.NET.
Una transacción consiste en un comando único o en un grupo de comandos que se
ejecutan como un paquete. Las transacciones permiten combinar varias operaciones en
una sola unidad de trabajo. Si en un punto de la transacción se produjera un error, todas
las actualizaciones podrían revertirse y devolverse al estado que tenían antes de la
transacción.
En ADO.NET, las transacciones se controlan con el objeto Connection. Puede iniciar una
transacción local con el método BeginTransaction. Una vez iniciada una transacción, puede
inscribir un comando en esa transacción con la propiedad Transaction de un objeto
Command. Luego, puede confirmar o revertir las modificaciones realizadas en el origen de
datos según el resultado correcto o incorrecto de los componentes de la transacción. Las
operaciones para confirmar una transacción es Commit y la operación para revertir o
deshacer una transacción es RollBack.
Si desea saber más acerca de estos temas, puede consultar las siguientes páginas.
o http://dawconsblog.blogspot.com/2014/04/tutorial-crud-con-mvc-y-entity-
framework_14.html
o https://translate.google.com.pe/translate?hl=es&sl=en&u=https://msdn.microsoft.co
m/en-us/data/jj729737.aspx&prev=search
o http://speakingin.net/2007/11/18/aspnet-mvc-framework-primera-parte/
o https://docs.microsoft.com/en-
us/dotnet/api/system.web.httppostedfilebase?view=netframework-4.8
UNIDAD DE
APRENDIZAJE
IMPLEMENTANDO E-COMMERCE
EN ASP.NET MVC
LOGRO DE LA UNIDAD DE APRENDIZAJE
TEMARIO
ACTIVIDADES PROPUESTAS
Figura 1: e-commerce
http://beople.es/las-10-tendencias-del-e-commerce/
Podría pensarse que tener unas páginas web y una pasarela de pagos podría ser
suficiente, pero no es así. Cualquier acción de comercio electrónico debe estar guiada
por criterios de rentabilidad o, al menos, de inversión, y por tanto deben destinarse los
recursos necesarios para el cumplimiento de los objetivos. Porque si bien se suele
decir que poner una tienda virtual en Internet es más barato que hacerlo en el mundo
real, las diferencias de coste no son tantas como parece, si se pretende hacerlo bien,
claro.
Para poder obtener un beneficio con el que rentabilizar las inversiones realizadas que
son las que permiten la realización de los dos primeros objetivos. El equilibrio en la
aplicación de los recursos necesarios para el cumplimiento de estos objetivos permitirá
traspasar el umbral de rentabilidad y convertir la presencia en Internet en un auténtico
negocio.
Además de estos agentes suelen intervenir otros que están más relacionados con el
suministro de tecnología en Internet (proveedores de hospedaje, diseñadores de
páginas web, etc.) que con el propio comercio electrónico.
Todas estas operaciones se suelen realizar bajo lo que se denomina "servidor seguro",
que no es otra cosa que un ordenador verificado por una entidad de certificación y que
utiliza un protocolo especial denominado SSL (Secure Sockets Layer), garantizando la
confidencialidad de los datos, o más recientemente con el protocolo SET (Secure
Electronic Transaction).
Los carritos de compra son aplicaciones dinámicas que están destinadas a la venta por
internet y que si están confeccionadas a medida pueden integrarse fácilmente dentro
de websites o portales existentes, donde el cliente busca comodidad para elegir
productos (libros, música, videos, comestibles, indumentaria, artículos para el hogar,
electrodomésticos, muebles, juguetes, productos industriales, software, hardware, y un
largo etc.) -o servicios- de acuerdo a sus características y precios, y simplicidad para
comprar.
Por otro lado, dentro de las opciones existentes también están los carritos de compra
enlatados (en este caso se debe estar seguro de que sus características son
compatibles con los requerimientos); open source (código abierto) como osCommerce
o una amplia variedad de carritos de compras pagos.
En los programas que hemos visto hasta ahora, hemos utilizado variables que solo
existían en el archivo que era ejecutado. Cuando cargábamos otra página distinta, los
valores de estas variables se perdían a menos que nos tomásemos la molestia de
pasarlos por la URL o inscribirlos en las cookies o en un formulario para su posterior
explotación. Estos métodos, aunque útiles, no son todo lo prácticos que podrían en
determinados casos en los que la variable que queremos conservar ha de ser utilizada
en varios scripts diferentes y distantes los unos de los otros.
Podríamos pensar que ese problema puede quedar resuelto con las cookies ya que se
trata de variables que pueden ser invocadas en cualquier momento. El problema, ya lo
hemos dicho, es que las cookies no son aceptadas ni por la totalidad de los usuarios ni
por la totalidad de los navegadores lo cual implica que una aplicación que se sirviera de
las cookies para pasar variables de un archivo a otro no sería 100% infalible.
Nos resulta pues necesario el poder declarar ciertas variables que puedan ser
reutilizadas tantas veces como queramos dentro de una misma sesión. Imaginemos un
sitio multilingüe en el que cada vez que queremos imprimir un mensaje en cualquier
página necesitamos saber en qué idioma debe hacerse. Podríamos introducir un script
identificador de la lengua del navegador en cada uno de los archivos o bien declarar
una variable que fuese valida para toda la sesión y que tuviese como valor el idioma
reconocido en un primer momento.
Estas variables que son válidas durante una sesión y que luego son "olvidadas" son
definidas con el objeto Session de la siguiente forma:
Una vez definida, la variable Session, será almacenada en memoria y podrá ser
empleada en cualquier script del sitio web.
La duración de una sesión viene definida por defecto en 20 minutos. Esto quiere decir
que si en 20 minutos no realizamos ninguna acción, el servidor dará por finalizada la
sesión y todas las variables Session serán abandonadas. Esta duración puede ser
modificada con la propiedad Timeout:
Una forma de borrar las variables Session sin necesidad de esperara que pase este
plazo es a partir del método Abandon:
Session.Abandon
De este modo todas las variables Session serán borradas y la sesión se dará por
finalizada. Este método puede resultar práctico cuando estemos haciendo pruebas con
el script y necesitemos reinicializar las variables.
Laboratorio 4.1
Implementando el proceso del e-commerce en ASP.NET MVC
Implemente una aplicación ASP.NET MVC que permita registrar las ventas por internet.
Solución.
Creamos un proyecto ASP.NET MVC llamado MvcCarrito
En la carpeta Content vamos a agregar una hoja de Estilo tal como se muestra
Seleccionar
Seleccionar
Nombre
Cuerpo de la pagina
Producto seleccionado
Seleccionar
Seleccionar
Nombre
En la clase partial definimos el diseño de la página para listar los productos, tal como se
muestra
En la clase partial _PartialRegistro definimos el diseño para visualizar los datos del producto
seleccionado, tal como se muestra
Agregando un Controlador
A continuación agregamos el controlador llamado CarritoController, tal como se muestra
Seleccionar
Agregando la Vista
Agregar la vista llamada Index, de plantilla Empty; presiona el botón Agregar
A continuación defina la Vista del Action Index, diseña la vista tal como se muestra.
En el controlador Carrito, defina el método Seleccionar, donde recibe el id, busca el registro en
la tabla tb_productos, enviando el registro.
A continuación ejecuta el proyecto, al seleccionar el producto, mostraremos sus datos, tal como
se muestra
Realizar la Compra
Realizar el Pago
Defina el ActionResult Pago, el cual envía los datos de la compra, tal como se muestra. A
continuación defina la vista del método.
Almacenar la Transacción
Función autogenera(), retorna el siguiente valor del número del pedido. Utilice la función
ExecuteScalar en el proceso
A continuación defina el Actionresult Pago, el cual ejecuta el proceso para agrega registros a la
base de datos.
Resumen
El comercio electrónico, o E-commerce, como es conocido en gran cantidad de portales
existentes en la web, es definido por el Centro Global de Mercado Electrónico como
“cualquier forma de transacción o intercambio de información con fines comerciales en la
que las partes interactúan utilizando Tecnologías de la Información y Comunicaciones
(TIC), en lugar de hacerlo por intercambio o contacto físico directo”.
La actividad comercial en Internet o comercio electrónico, no difiere mucho de la actividad
comercial en otros medios, el comercio real, y se basa en los mismos principios: una oferta,
una logística y unos sistemas de pago
La capa de acceso a datos realiza las operaciones CRUD (Crear, Obtener, Actualizar y
Borrar), el modelo de objetos que .NET Framework proporciona para estas operaciones es
ADO.NET. Los objetivos básicos de cualquier sitio web comercial son tres: atraer visitantes,
fidelizarlos y, en consecuencia, venderles nuestros productos o servicios
Para poder obtener un beneficio con el que rentabilizar las inversiones realizadas que son
las que permiten la realización de los dos primeros objetivos. El equilibrio en la aplicación
de los recursos necesarios para el cumplimiento de estos objetivos permitirá traspasar el
umbral de rentabilidad y convertir la presencia en Internet en un auténtico negocio.
La aparición y consolidación de las plataformas de e-commerce ha provocado que, en el
tramo final del ciclo de compra (en el momento de la transacción), el comprador potencial
no interactúe con ninguna persona, sino con un canal web habilitado por la empresa, con el
llamado carrito de compra
Los carritos de compra son aplicaciones dinámicas que están destinadas a la venta por
internet y que si están confeccionadas a medida pueden integrarse fácilmente dentro de
websites o portales existentes, donde el cliente busca comodidad para elegir productos
(libros, música, videos, comestibles, indumentaria, artículos para el hogar,
electrodomésticos, muebles, juguetes, productos industriales, software, hardware, y un
largo etc.) -o servicios- de acuerdo a sus características y precios, y simplicidad para
comprar.
Si desea saber más acerca de estos temas, puede consultar las siguientes páginas.
o http://albeverry.blogspot.com/
o http://rogerarandavega.blogspot.com/2014/04/arquitectura-n-capas-estado-del-
arte_18.html
o http://icomparable.blogspot.com/2011/03/aspnet-mvc-el-mvc-no-es-una-forma-
de.html
o http://lgjluis.blogspot.com/2013/11/aplicaciones-en-n-capas-con-net.html
o http://anexsoft.com/p/36/asp-net-mvc-usando-ado-net-y-las-3-capas
UNIDAD DE
APRENDIZAJE
CONSUMO DE SERVICIOS
LOGRO DE LA UNIDAD DE APRENDIZAJE
TEMARIO
ACTIVIDADES PROPUESTAS
Figura 2: arquitectura
http://www.esasp.net/2009/09/wcf-introduccion-y-conceptos-basicos.html
Ejemplo:
http://www.ejemplowcf.com/miServicioWCF/EjemploServicio.svc
Binding: son usados para especificar los detalles del transporte, encoding y protocolo
requeridos por los clientes y servicios para comunicarse unos con otros. Los bindings
en WCF son usados para la representación de un endpoint. Y un endpoint es un lugar
donde los clientes pueden comunicarse con el servicio de WCF.
Un binding esta compuesto por una colección de elementos. Cada elemento describe
algunos aspectos de como el servicio se comunicará con el cliente. Un binding debe al
menos incluir un elemento de transporte, un message-encoding (este es provisto por el
elemento transporte por defecto), y por último una o varias definiciones del elemento de
protocolo.
Service contract: es la interface de un servicio WCF. Nos dice que puede hacer un
servicio. Dentro de estas interfaces, se puede definir una cantidad de métodos o
operaciones que especifican las tareas del servicio. Un Servicio WCF tiene que tener al
menos un contracto para recibir los pedidos de los clientes que lo consumen.
Data contract: son los tipos de datos de un servicio WCF. Todos los tipos de datos
usados por el servicio WCF deben ser descriptos en la metadata para habilitar a otras
aplicaciones a interoperar con el servicio. Una data contract puede ser usado por un
operation contract como parámetro o el tipo de retorno, o puede ser incluso usado por
un message contract. Si el servicio WCF solo usa tipos primitivos (int, char, etc) no es
necesario definir una data contract.
Endpoint: Los mensajes son enviados entre endpoints. Y los endpoints son el lugar
donde los mensajes son enviados y recibidos o ambos, y tienen toda la información
requerida para el intercambio de mensajes. Un servicio puede exponer uno o mas
endpoints. Cuando necesitamos conectarnos al servicio, la aplicación cliente genera un
endpoint que es compatible con el endpoint del servicio.
Hosting: Un servicio WCF es un componente que puede ser llamado por otras
aplicaciones. Por esto, el servicio debe ser alojado en un ambiente para ser usado por
otras aplicaciones. El ambiente que aloja nuestro servicio WCF, es una aplicaci’on que
maneja y controla el tiempo de vida de nuestro servicio.
Channels: Hemos visto previamente que un servicio WCF debe ser alojando en algún
ambiente (puede ser una aplicación o un server). La aplicación cliente tiene que
especificar los bindings necesarios para conectarse al servicio WCF. Ahora los
elementos del binding, son interfaces y deben ser implementados en clases concretas.
Esta implementación de un elemento del binding es lo que llamamos channel. (canal).
Un elemento del binding representa una configuración y el channel es la
implementación asociada con esa configuración.
Metadata: describe las características de un servicio a una entidad externa para poder
comunicarse con el servicio. Para explicarlo un poquito más, la metadata puede ser
consumida usando la utilidad de SvcUtil.exe el cual genera una clase proxy y la
configuración que la aplicación cliente puede usar para interactuar con el servicio.
La metadata que expone el servicio incluye el esquema del documento XML que define
la data contract del servicio y los documentos WSDL que describen los métodos del
servicio.
Configurar el Servicio: Especificar los endpoints y metadata del servicio, estos son
definidos en un archivo de configuración de .NET (Web.config o App.config).
Diseñar una aplicación Hosting del servicio: Web Host dentro del IIS - Self-Host
dentro de cualquier proceso .NET - Managed Windows Services - Windows
Process Activation Service.
Diseñar una aplicación cliente del servicio: Acá definiremos las aplicaciones
clientes que consumirán el servicio.
WCF Data Services proporciona un medio fácil de permitir a los clientes utilizar las
funcionalidades de back-end en las bases de datos que residen en el lado del servidor,
donde crea una capa de servicios de interfaz basado en la nube, la cual es expuesta
entre el cliente y el Entity Data Model (EDM), que, por otra parte interactúa con el
database.
Laboratorio 5.1
Implementando CRUD en ASP.NET MVC consumiendo un
servicio WCF
Implemente un proyecto ASP.NET MVC donde permita realizar las operaciones de
actualización y consulta de datos consumiendo un servicio WCF.
SOLUCION
Crear un nuevo proyecto tipo Aplicación servicio WCF, tal como se muestra.
Seleccionar
Asigne el nombre y ubicación del proyecto WCF, tal como se muestra. Presiona botón CREAR
Nombre y ubicación
del proyecto
IService y Service
Primero defina los DataContract para Cliente y Pais, defina en cada uno sus atributos
(DataMember), tal como se muestra
DataContract
Cliente
DataContract Pais
OperationContract
Librerias
Seleccionado la opción se agrega la lista de los métodos a implementar, tal como se muestra
Métodos a implementar
en Service1
Definición de la conexión
de datos
Implemente el método clientes(), el cual retorna, como lista, los registros de la tabla tb_clientes.
A continuación, implemente el método paises(), el cual retorna, como lista, los registros de la
tabla tb_paises
Implementa el método Actualizar, donde actualiza los datos de un registro a la tabla tb_clientes,
retornando un mensaje de tipo string, tal como se muestra
Implemente el método Buscar(), donde retorna el registro de tb_cliente por su campo idcliente,
tal como se muestra.
Por último, Implemente el método Eliminar(), donde elimina el registro de tb_cliente por su
campo idcliente, tal como se muestra
Compilar el proyecto
Ver en el Explorador
Selecciona la referencia de
servicio
En la ventana, pegar la dirección del servicio y presiona el botón Ir, donde se visualiza los
métodos definidos. Asigne un nombre a la referencia, tal como se muestra.
Nombre de la referencia
Selecciona controlador en
blanco
Definido el ActionResult, agregar una vista, cuya plantilla será de tipo List y su clase Cliente
(WCF), tal como se muestra
Defina el ActionResult Create(), GET y POST donde envía un nuevo Cliente() y retorna los
datos para ejecutar el método Agregar del servicio, tal como se muestra.
Método GET
Método POST
Definido el ActionResult, agregar una vista, cuya plantilla será de tipo CREATE y su clase
Cliente (WCF), tal como se muestra
Vista CREATE
Modifica la estructura de la Vista, agrega el DropDown para países tal como se muestra.
DropDown para
paises
Método GET
Método POST
Definido el ActionResult, agregar una vista, cuya plantilla será de tipo EDIT y su clase Cliente
(WCF), tal como se muestra
Vista EDIT
En la vista modificar el contenido del campo Pais, agregar un DropDownList para listar los
registros de países, tal como se muestra
DropDown para
paises
Ejecuta la Vista Clientes(), selecciona un cliente, donde se visualiza los datos del cliente, edite
o modifique sus valores, al presionar el botón Save, se ejecuta el proceso y se visualiza en la
lista los clientes y del cliente modificado.
Resumen
Windows Communication Foundation (WCF) es un marco de trabajo para la creación
de aplicaciones orientadas a servicios. Con WCF, es posible enviar datos como
mensajes asincrónicos de un extremo de servicio a otro. Un extremo de servicio puede
formar parte de un servicio disponible continuamente hospedado por IIS, o puede ser
un servicio hospedado en una aplicación. Un extremo puede ser un cliente de un
servicio que solicita datos de un extremo de servicio. Los mensajes pueden ser tan
simples como un caracter o una palabra enviados como XML, o tan complejos como un
flujo de datos binarios.
Los mensajes son enviados entre endpoints. Un endpoint es un lugar donde un
mensaje es enviado, o recibido, o ambos. Un servicio expone uno o más application
endpoints, y un cliente genera un endpoint compatible con uno de los endpoints de un
servicio dado. La combinación de un servicio y un cliente compatibles conforman un
communication stack.
Una de las Ventajas de utilizar WCF
o Código Centralizado. La principal ventaja del uso de servicios públicos es el
código centralizado.
o Seguridad. Donde se accede a la información que se encuentra en una sola
capa de acceso, es posible tener un mejor control de la misma.
o Escalabilidad
El consumo de servicios WCF le habilita para agregar servicios WCF existentes al
proceso empresarial. Es posible agregar varios servicios WCF a una única
orquestación.
Entre los adaptadores de envío WCF de BizTalk se incluyen cinco adaptadores de
envío físicos que representan los enlaces predefinidos de WCF BasicHttpBinding,
WsHttpBinding, NetTcpBinding, NetNamedPipeBinding y NetMsmqBinding. Asimismo,
los adaptadores de WCF de BizTalk incorporan los adaptadores personalizados que
permiten configurar libremente la información de comportamiento y enlace de WCF en
un puerto de envío.
Si desea ver mas
o https://msdn.microsoft.com/es-es/library/ms731082(v=vs.110).aspx
o http://www.esasp.net/2009/09/wcf-introduccion-y-conceptos-basicos.html
o https://msdn.microsoft.com/es-es/library/bb226529.aspx
o http://www.dotnetfunda.com/articles/show/1893/a-basic-introduction-to-
creation-of-crud-operation-using-odata-web-ser
o http://pabletoreto.blogspot.com/2014/12/crear-hospedar-y-consumir-un-
wcf4.html
o http://www.esasp.net/2009/09/wcf-desarrollando-un-servicio-y-cliente.html
UNIDAD DE
APRENDIZAJE
CONSUMO DE SERVICIOS
LOGRO DE LA UNIDAD DE APRENDIZAJE
TEMARIO
ACTIVIDADES PROPUESTAS
Figura 1
http://maninformatic.blogspot.pe/2013/12/diferencia-entre-mvc-y-web-api.html
La API de Web ASP.NET es una plataforma ideal para la creación de aplicaciones cuyo
propósito es exponer servicios bajo el protocolo HTTP utilizando el estilo de la
arquitectura REST (Representational State Transfer).
Es un framework que usa los servicios HTTP y hace que esto sea fácil para
proporcionar una respuesta a la solicitud del cliente. La respuesta depende de la
petición de los clientes. Web API construye los servicios HTTP y gestiona la
petición usando el protocola HTTP. Web API es codigo abierto y este puede ser
hospedado en la aplicación o en el servidor IIS. La petición puede ser GET, POST,
DELETE o PUT.
Permite mostrar los datos en varios formatos, como XML y JSON.
Está diseñado para llegar a un amplio rango de clientes en aplicaciones móviles,
tablets, Web.
Método
Acción URI relativa
HTTP
Obtenga una lista de
GET / Api / ServerData
ServerData
Método
Acción URI relativa
HTTP
Obtener una ServerData por
GET / Api / ServerData / Identificación
ID
Obtén ServerData por tipo de / Api / ServerData / tipo / tipo de
GET
datos datos
Obtén ServerData por la
GET / Api / ServerData / ip / ip
máquina IP
Crear un ServerData fresca POST / Api / ServerData
Actualizar una ServerData
PUT / Api / ServerData / Identificación
existente
Eliminar una ServerData
DELETE / Api / ServerData / Identificación
existente
Ref: https://docs.microsoft.com/es-es/aspnet/web-api/overview/web-api-routing-and-
actions/routing-in-aspnet-web-api
Por ejemplo
Una aplicación móvil requiere un servicio.
HTML 5 requiere un servicio.
PC de escritorio y tabletas requieren servicios.
El Marco ASP.Net aprovecha tanto los estándares web como HTTP, JSON y XML y
proporciona una forma sencilla de construir y exponer a los servicios de datos basados
en REST.
Algunos conceptos básicos de ASP.Net MVC son similares a la API de Web ASP.Net,
tales como enrutamiento y los controladores.
Pero eso no es todo; tiene muchas otras características, tales como: la negociación de
contenido (para serializar automáticamente los datos en el formato que se solicita).
Para implementar un proceso CRUD, Web API nos provee de cuatro métodos HTTP
principales (GET, PUT, POST y DELETE) se pueden asignar a operaciones CRUD de
la siguiente manera.
Figura 2
http://www.tutorialsteacher.com/webapi/consume-web-api-for-crud-operation
Laboratorio 6.1
Implementando consulta en ASP.NET MVC consumiendo un
WEB API
Implemente un proyecto ASP.NET MVC donde permita realizar las operaciones de consulta y
actualización de datos consumiendo un servicio Web API.
Selecciona
Nombre y ubicación
del proyecto
Selecciona la plantilla a API web y la autenticación: Sin autenticación, tal como se muestra,
presionar el botón CREAR
En la carpeta Models, crea la clase Cliente y defina los atributos tal como se muestra.
Selecciona
Trabajando en el Controlador
Como primer paso, agrega las referencias y librerías, tal como se muestra.
Definir la conexión
En el controlador defina la interface del ActionResult llamada getclientes(), cuya ruta será
“api/listado”. A continuación, programa el método.
Metodo getcllientes()
Presiona la tecla F5 y agregue la ruta /api/listado, donde se visualiza la lista de los clientes, tal
como se muestra.
Cree una aplicación ASP.NET MVC, a partir de allí vamos a agregar una librería para trabajar
con Web API.
Agrega la Vista del método, de plantilla List y de clase de modelo Cliente, tal como se muestra
Defina la plantilla y
la clase de modelo
ActionLink, modifica el
valor del parámetro id
Defina la plantilla y
la clase de modelo
En la Vista, modifica el scafold del campo idpais por un DropDownList, tal como se muestra en
la figura.
Ejecuta la Vista, ingresa los datos a los controles, al presionar el botón Create, el registro se
agrega a la tabla y se visualiza en la página Index, tal como se muestra
Defina la plantilla y
la clase de modelo
En la Vista, modifica el scafold del campo idpais por un DropDownList, tal como se muestra en
la figura.
Ejecuta la Vista Index, al hacer click en el link Edit de un registro, visualizamos en la página
Edit, los datos del cliente seleccionado. Modificar su contenido. Al hacer click en el botón Save,
se direcciona a la página index(), con los datos actualizados
Resumen
La Web API se vuelve cada vez má importante con la proliferación de dispositivos que
utilizamos hoy en día. La mayoría de los dispositivo móviles, como teléfonos y tablets,
se ejecutan aplicaciones que utilizan datos recuperados de la Web a través de HTTP.
Las aplicaciones de escritorio también se están moviendo en esta dirección con más y
más contenido en línea y sincronización y Windows 8 prometiendo una experiencia en
aplicaciones similares.
Del mismo modo, muchas aplicaciones web se basan en la funcionalidad del cliente
enriquecido para crear y manipular la interfaz de usuario del navegador, usando AJAX
en lugar de datos HTML generados por eñ servidor para cargar la interfaz de usuario
con los datos.
Si desea exponer los datos / información de su solicitud a sus clientes y otras personas
luego de que otras personas puedan utilizar sus datos e interactuar con los datos /
información se expone a ellos.
Por ejemplo
o Una aplicación móvil requiere un servicio.
o HTML 5 requiere un servicio.
o PC de escritorio y tabletas requieren servicios.
Actualmente la mayoría de las aplicaciones de dispositivos requieren servicios API
Web.
El Marco ASP.Net aprovecha tanto los estándares web como HTTP, JSON y XML y
proporciona una forma sencilla de construir y exponer a los servicios de datos basados
en REST. Algunos conceptos básicos de ASP.Net MVC son similares a la API de Web
ASP.Net, tales como enrutamiento y los controladores.
Si desea ver mas
o http://www.c-sharpcorner.com/UploadFile/4b0136/implement-Asp-Net-web-api-
2-in-Asp-Net-mvc-5/
o https://www.codeproject.com/Articles/805931/ASP-NET-MVC-Features-
WebAPI
o http://www.codemag.com/Article/1601031
o http://www.dotnetglobe.com/2012/03/crud-operation-using-aspnet-web-api-
in.html
o https://www.mindstick.com/Articles/1472/crud-operation-using-asp-dot-net-web-
api-and-entity-framework-in-asp-dot-net-mvc-4
o http://www.codesolution.org/crud-operations-using-asp-net-web-api/
o https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api
o http://dotnetmentors.com/web-api/rest-based-crud-operations-with-asp-net-
web-api.aspx
UNIDAD DE
APRENDIZAJE
Al término de la unidad, el alumno conoce las técnicas para el diseño de un SPA, para
realizar operaciones de actualización de datos en ASP.NET MVC.
TEMARIO
ACTIVIDADES PROPUESTAS
5.1 ANGULARJS
5.1.1 Introducción a Angular
Desde su creación, Angular ha sido el framework preferido por la mayoría de los
desarrolladores Javascript. Este éxito ha provocado que los desarrolladores quieran
usar el framework para más y más cosas.
De ser una plataforma para la creación de Web Apps, ha evolucionado como motor de
una enorme cantidad de proyectos del ámbito empresarial y de ahí para aplicaciones
en la Web Mobile Híbrida, llevando la tecnología al límite de sus posibilidades.
La nueva herramienta está pensada para dar cabida a todos los usos dados por los
desarrolladores, llevar a Javascript a un nuevo nivel comparable a lenguajes más
tradicionales, siendo además capaz de resolver de una manera adecuada las
necesidades y problemas de la programación del lado del cliente. Entre las soluciones
aportadas en Angular o Angular 2:
TypeScript / Javascript:
Como base hemos puesto a Javascript, ya que es el inicio de los problemas de
escalabilidad del código. Ayuda poco a detectar errores y además produce con facilidad
situaciones poco deseables.
Lazy SPA:
Ahora el inyector de dependencias de Angular no necesita que estén en memoria todas
las clases o código de todos los elementos que conforman una aplicación. Ahora con
Lazy SPA el framework puede funcionar sin conocer todo el código de la aplicación,
ofreciendo la posibilidad de cargar más adelante aquellas piezas que no necesitan
todavía.
Renderizado Universal:
Angular nació para hacer web y renderizar en HTML en el navegador, pero ahora el
renderizado universal nos permite que no solo se pueda renderizar una vista a HTML.
Gracias a ésto, alguien podría programar una aplicación y que el renderizado se haga,
por ejemplo, en otro lenguaje nativo para un dispositivo dado.
Otra cosa que permite el renderizado universal es que se use el motor de renderizado
de Angular del lado del servidor. Es una de las novedades más interesantes, ya que
ahora podrás usar el framework para renderizar vistas del lado del servidor,
permitiendo un mejor potencial de posicionamiento en buscadores de los contenidos de
una aplicación.
Componentes:
La arquitectura de una aplicación Angular ahora se realiza mediante componentes. En
este caso no se trata de una novedad de la versión 2, ya que en la versión de Angular
1.5 ya se introdujo el desarrollo basado en componentes.
Los componentes son estancos, no se comunican con el padre a no ser que se haga
explícitamente por medio de los mecanismos disponibles, etc. Todo esto genera
aplicaciones más mantenibles, donde se encapsula mejor la funcionalidad y cuyo
funcionamiento es más previsible. Ahora se evita el acceso universal a cualquier cosa
desde cualquier parte del código, vía herencia o cosas como el "Root Scope", que
permitía en versiones tempranas de Angular modificar cualquier cosa de la aplicación
desde cualquier sitio.
Instalando AngularJS
Desde la opción de Proyecto, selecciona la opción Administrando paquetes NUGET.
Agrega una Vista, la cual será vacía sin modelo, tal como se muestra.
Aquí en el div, llama una directiva llamada "ng-controller", cuyo valor consiste en el
nombre de la función JavaScript que se quiere aplicar a un Div, Span o cualquier
elemento HTML específico.
Hay que añadir la directica "ng-app" en la etiqueta HTML. ng-app declara que esto es
una página AngularJS. Si no agregas esta directiva en la etiqueta HTML, tu aplicación
no funcionará correctamente porque no podrá detectar las demás directivas de
AngularJS.
Ahora nuestra aplicación de Hola Mundo está lista para ser ejecutada.
Figura 1
Ref: http://www.macoratti.net/16/03/mvc_crudajs1.htm
Una estrategia para trabajar con Angular en una aplicación ASP.NET MVC es
definir un archivo js para la ejecución de sus métodos en las vistas.
Nota: Observe en el método get la sintaxis: '/ home / GetProdutos /' donde
home se refiere al controlador HomeController.
Resumen
La Inversión de Control es un patrón de diseño pensado para permitir un menor
acoplamiento entre componentes de una aplicación y fomentar así el reuso de los mismos.
Actualmente existen dos técnicas de implementación para el IoC: Inyección de
dependencias y Service Locutor; en este manual nos enfocaremos en la implementación de
la Inyección de Dependencia (DI).
Service Locator es un patrón que nos permite localizar servicios. Es una clase, el
ServiceLocator a la cual le podemos pedir instancias de un servicio concreto. Esto es útil
para poder tener distintas implementaciones de un mismo servicio y cambiar, mediante
configuración, la implementación que queremos que devuelva el ServiceLocator cuando le
pidamos la instancia del servicio. ServiceLocator actúa como un catálogo central de
instancias de servicios al que le podemos solicitar la instancia del servicio que
necesitemos.
Para un localizador más sofisticado puedo heredar del Localizador de Servicios y pasar
esta subclase en la variable de la clase de registro. Puedo cambiar los métodos estáticos
para llamar a un método en la instancia en lugar de acceder directamente a las variables
de instancia. Puedo proporcionar localizadores para un hilo específico usando una
ubicación de almacenamiento específica para el hilo.
Una dependencia entre un componente y otro, puede establecerse estáticamente o en
tiempo de compilación, o bien, dinámicamente o en tiempo de ejecución. Es en éste último
escenario es donde cabe el concepto de inyección, y para que esto fuera posible, debemos
referenciar interfaces y no implementaciones directas.
Lo que propone entonces la Inyección de dependencias, es no instanciar las dependencias
explícitamente en su clase, sino que declarativamente expresarlas en la definición de la
clase. La esencia de la inyección de las dependencias es contar con un componente capaz
de obtener instancias validas de las dependencias del objeto y pasárselas durante la
creación o inicialización del objeto.
En la inyección basada en un constructor, se creará una instancia de BusinessFacade
usando un constructor parametrizado al cual se le pasará una referencia de un
IBusinessLogic para poder inyectar la dependencia.
Puede buscar:
https://medium.com/asp-net-and-angular/how-to-create-an-asp-net-mvc-5-project-with-
angular-6-in-visual-studio-part-1-8b116e19a335
https://programacion.net/articulo/aprende_como_funciona_angularjs_con_este_sencillo
_ejemplo_1239
http://www.macoratti.net/16/03/mvc_crudajs1.htm
APÉNDICE
JQUERY Y AJAX
Introducción al Jquery
jQuery es la librería JavaScript que ha irrumpido con más fuerza como alternativa a
Prototype. Su autor original es John Resig, aunque como sucede con todas las librerías
exitosas, actualmente recibe contribuciones de decenas de programadores. jQuery
también ha sido programada de forma muy eficiente y su versión comprimida apenas
ocupa 20 KB.
jQuery comparte con Prototype muchas ideas e incluso dispone de funciones con el
mismo nombre. Sin embargo, su diseño interno tiene algunas diferencias drásticas
respecto a Prototype, sobre todo el "encadenamiento" de llamadas a métodos.
Agregando la librería
en el _Layout
Selectores
Permiten obtener el contenido del documento para ser manipularlo. Al utilizarlos, los
selectores retornan un arreglo de objetos que coinciden con los criterios especificados.
Este arreglo no es un conjunto de objetos del DOM, son objetos de jQuery con un gran
número de funciones y propiedades predefinidas para realizar operaciones con los
mismos.
Los selectores básicos están basados en la sintaxis CSS y funcionan mas o menos de
la misma manera:
Select Descripción
nombre de etiqueta Encuentra elementos por etiqueta HTML
#id Encuentra elementos por ID o identificador
.clase Encuentra elementos por clase
etiqueta.clase Encuentra elementos del tipo de la etiqueta que tenga la
clase “clase”
etiqueta#id.clase Encuentra los elementos del tipo de la etiqueta que tienen
el ID y la clase
* Encuentra todos los elementos de la página
Filtros
Los filtros se utilizan para proveer un mayor control sobre como los elementos son
seleccionados en el documento.
Select Descripción
:first Selecciona solo el primero de los elementos en la lista
:last Selecciona solo el ultimo de los elementos en la lista
:even Selecciona solo los elementos en posiciones pares de la lista
:odd Selecciona solo los elemento en posiciones impares de la lista
:eq(n) Obtiene elementos que están solo en el índice especificado
:gt(n) Incluye elementos que están después del índice especificado
:lt(n) Incluye elementos que están antes del índice especificado
:heder Selecciona todos los elementos tipo encabezado (H1, H2, etc.)
:animated Selecciona todos los elementos que están siendo animados
:not(selector) Incluye todos los elementos que no cumplen con el selector
proporcionado
Manipulando contenido
Cuando seleccionamos y filtramos contenido de una página web, lo hacemos
normalmente porque queremos hacer algo con el: crear nuevo contenido y agregarlo
dinámicamente a la página.
jQuery tiene funciones para crear, copiar, eliminar y moved contenido, incluso para
envolver elementos dentro de otros. También provee soporte para trabajar con css.
Si pasamos HTML la función text(), el código será escapado y mostrado como texto.
Manipulando Atributos
jQuery permite la manipulación de atributos de uno o varios elementos HTML mediante
las siguientes funciones:
attr(nombre): Retorna el valor del atributo "nombre" del elemento seleccionado.
attr({nombre: valor}): Asigna varios atributos del elemento seleccionado. Para
asignar los atributos se usa la notación de objeto de javascript (JSON).
attr(nombre, valor): Asigna "valor" al atributo "nombre" del elemento seleccionado.
removeAttr(nombre): Elimina el atributo "nombre" del elemento seleccionado.
Insertando Contenido
Las siguientes funciones permiten para agregar contenido a los elementos
seleccionados:
append(contenido): agrega el contenido dentro del los elementos seleccionados.
appendTo(selector): agrega el contenido a otros elementos especificados.
prepend(contenido): agrega el contenido de primero dentro de los elementos
seleccionados.
prependTo(selector): agrega el contenido de primero a otros elementos
especificados.
after(contenido): agrega el contenido después del elemento seleccionado.
before(contenido): agrega el contenido antes del elemento seleccionado.
insertAfter(selector): agrega el contenido después de otros elementos elementos
seleccionados.
insertBefore(contenido): agrega el contenido antes de otros elementos elementos
seleccionados.
Manejo de eventos
jQuery define una lista de eventos y funciones para la administración de los mismos, la
sintaxis por defecto para un manejador de evento es de la siguiente forma
$.fn.nombreEvento.
Evento Descripción
.blur() Se lanza sobre un elemento que acaba de
perder el foco. Aplicable a los inputs de
formularios
.click() Se lanza cuando pinchamos sobre el
elemento que hemos asociado el evento.
.dblclick() Se lanza cuando hay un doble click sobre
el elemento
.focus() Evento que permite saber cuando un
elemento recibe el foco.
.hover() Se lanza cuando el mouse esta encima
del elemento del evento.
.keydown() Se lanza cuando el usuario pulsa una
tecla
.keypress() Se lanza cuando se mantiene presionada
la tecla, es decir, se lanza cada vez que
se escriba el carácter.
.load() Se lanza tan pronto el elemento ha
terminado de cargarse por completo.
.mousedown() Se lanza cuando pinchamos un elemento
.mousemove() Se lanza cuando el mouse esta encima
del elemento.
.mouseover() Se lanza cuando el mause entra por
primera vez en el elemento.
.one() Igual que el bind() pero el evento se
ejecuta una vez
.select() Se lanza cuando el usuario selecciona un
texto.
.toggle() Se utiliza para generar comportamientos
de cambio de estado generados al pinchar
sobre un elemento
Atributo Descripcion
event.currentTarget Devuelte el elemento sobre el que se ha
lanzado el evento. Por ejemplo, si el evento
es un onclick de un enlace, el currentTarget
sería el enlace.
event.data Devuelve los datos que hayamos podido
pasar al evento cuando se asocia con bind
event.isDefaultPrevented() Devuelve si se ha lanzado el método
preventDefault() o no.
En el siguiente ejemplo definidos el evento click para los botones Saludos y Salir
utilizando jquery
get(): Retorna una lista de elementos del DOM. Esta función es útil cuando se
necesitan hacer operaciones en el DOM en lugar de usar funciones de jQuery.
get(posición): Retorna un elemento del DOM que esta en la posición especificada.
find({expresión}): Busca elementos que cumplen con la expresión especificada.
each(callback(i, element)): Ejecuta una función dentro del contexto de cada
elemento seleccionado. Ejecuta un callback recibiendo como parámetro la posición
de cada elemento y el propio elemento.
Jquery y Ajax
AJAX significa Asynchronous JavaScript and XML. Esta tecnología nos permite
comunicarnos con un servicio web sin tener que recargar la página. Con jQuery, hacer
uso de AJAX es muy sencillo. JQuery provee varias funciones para trabajar con AJAX.
La mas común es usar $.ajax().
Funciones
$.get():Realiza una llamada GET a una dirección específica. Esta función nos indica si
la operación fue exitosa y ha tenido errores.
$
.
p
o
st(): realiza una llamada POST a una dirección URL
$
.
l
o
a
d
(): carga una dirección url y coloca los datos retornados en los elementos
seleccionados.
Eventos Globales
Jquery ofrece un conjunto de funciones que se invocan automáticamente cuando se
dispara su evento correspondiente.
$.ajaxError(): es llamada cuando una función AJAX es completada pero con errores
$.ajaxStart(): JQuery lleva un control de todas las llamadas AJAX que ejecutas. Si
ninguna está en curso, esta función es invocada.
$.ajaxStop(): se invoca cada vez que una función AJAX es completada y quedas otras
en curso. Incluso es invocada cuando la ultima función AJAX es cancelada.
Laboratorio
Creando una aplicación ASP.NET MVC y Jquery
Implemente un proyecto ASP.NET MVC donde permita realizar operaciones de listado y
actualización de productos utilizando anotaciones y ventanas de dialogo en jquery.
Seleccionar la
opción
Nombre de la clase
Importar la librería
Para trabajar con las ventanas modales con Jquery, utilizaremos dos librerías: jquery-1.8.2 y
jquery-ui-1.8.2.min, tal como se muestra.
Librerías a utilizar
En la carpeta Scripts, agregue un archivo JavaScript llamado jsEventos, tal como se muestra
Selecciona item
A continuación defina cada uno de las acciones a los objetos que utilizaremos en el proceso
En el _Layout.cshtml, agregue las librerías de trabajo, tal como se muestra y comentar la línea
@Script.Render.
Comentar la línea
Seleccionar
Nombre del
controlador
Importar la librería
Activar la opción y
selecciona la clase de
modelo Producto
Action Create
En el controlador defina la opción Create, el cual agrega un nuevo producto a la Lista
A continuación agrega la Vista a la acción Create, tal como se muestra, donde seleccionamos
la clase de modelo: producto; selecciona la plantilla para scaffold: Create
Activar la opción y
selecciona la clase de
modelo Producto
Action Details
En el controlador defina la acción Details, el cual retorna el registro de Productos por su campo
id. Defina el proceso tal como se muestra.
A continuación agrega la Vista a la acción Details, tal como se muestra, donde seleccionamos
la clase de modelo: producto; selecciona la plantilla para scaffold: Details
Activar la opción y
selecciona la clase de
modelo Producto
Action Edit
En el controlador defina la acción Edit, el cual retorna el registro de Productos por su campo id,
y recibe el registro para actualizar sus datos. Defina el proceso tal como se muestra
Activar la opción y
selecciona la clase de
modelo Producto
Action Delete
En el controlador defina la acción Delete, el cual retorna el registro de Productos por su campo
id, y confirmas la eliminación del registro por su id. Defina el proceso tal como se muestra
Activar la opción y
selecciona la clase de
Selecciona la plantilla
Delete
Para ejecutar el proceso presiona F5, donde se procede a: Agregar, Visualizar, Editar y
Eliminar productos utilizando pantallas modales
BOOTSTRAP
Introducción
Bootstrap es un framework CSS lanzado por un grupo de diseñadores de Twitter, para
maquetar y diseñar proyectos web, cuya particularidad es la de adaptar la interfaz del
sitio web al tamaño del dispositivo en que se visualice. Es decir, el sitio web se adapta
automáticamente al tamaño de una PC, una Tablet u otro dispositivo. Esta técnica de
diseño y desarrollo se conoce como “responsive design” o diseño adaptativo.
Bootstrap brinda una base pre-codificada de HTML y CSS para armar el diseño de una
página web o una aplicación web, y al ofrecerse como un recurso de código abierto es
fácil de personalizar y adaptar a múltiples propósitos.
Una ventaja es que, por lo mismo que en sí mismo no requiere conexión con una base
de datos, un sitio web implementado en Bootstrap corre perfectamente desde una
versión local, sin acceso a un servidor.
Estructura y función
Bootstrap es modular y consiste esencialmente en una serie de hojas de estilo LESS
que implementan la variedad de componentes de la herramienta. Una hoja de estilo
llamada bootstrap.less incluye los componentes de las hojas de estilo. Los
desarrolladores pueden adaptar el mismo archivo de Bootstrap, seleccionando los
componentes que deseen usar en su proyecto.
Los ajustes son posibles en una medida limitada a través de una hoja de estilo de
configuración central. Los cambios más profundos son posibles mediante las
declaraciones LESS.El uso del lenguaje de hojas de estilo LESS permite el uso de
variables, funciones y operadores, selectores anidados, así como clases mixin.
Desde la versión 2.0, la configuración de Bootstrap también tiene una opción especial
de "Personalizar" en la documentación. Por otra parte, los desarrolladores eligen en un
formulario los componentes y ajustes deseados, y de ser necesario, los valores de
varias opciones a sus necesidades. El paquete consecuentemente generado ya incluye
la hoja de estilo CSS pre-compilada.
Componentes re-usables
En adición a los elementos regulares de HTML, Bootstrap contiene otra interfaz de
elementos comúnmente usados. Ésta incluye botones con características avanzadas
(e.g grupo de botones o botones con opción de menú desplegable, listas de
navegación, etiquetas horizontales y verticales, ruta de navegación, paginación, etc.),
etiquetas, capacidades avanzadas de miniaturas tipográficas, formatos para mensajes
de alerta y barras de progreso.
Plug-ins de JavaScript
Los componentes de JavaScript para Bootstrap están basados en la librería jQuery de
JavaScript. Los plug-ins se encuentran en la herramienta de plug-in de jQuery. Proveen
elementos adicionales de interfaz de usuario como diálogos, tooltips y carruseles.
También extienden la funcionalidad de algunos elementos de interfaz existentes,
incluyendo por ejemplo una función de auto-completar para campos de entrada (input).
Estilos de bootstrap
Archivos js
Creando el proyecto
Iniciamos Visual Studio 2012 y creamos un nuevo proyecto:
1. Seleccionar el proyecto Web Visual Studio 2012
2. Seleccionar el FrameWork: 4.5.1
3. Seleccionar la plantilla Aplicación web de ASP.NET MVC 4
4. Asignar el nombre del proyecto
5. Presionar el botón ACEPTAR
Selecciona el tipo
de proyecto
Nombre del
proyecto
Seleccionar e instalar
Instalado el framework, se podrá visualizar los archivos dentro del explorador de soluciones
Estilos de bootstrap
Archivos js
En el archivo BundleConfig vamos a incluir varios archivos y librerías js y cs, tal como se muestra. En
lugar de incluir directamente las etiquetas <link> o <script> para referenciar los archivos externos, lo que
llamamos es Styles.Rendery Scripts.Render
Controlador Home
Vista Index
Ejecuta el proyecto, presionando F5. Al presionar el boton Saludo, se visualiza una ventana
Modal, tal como se muestra.
Creando el proyecto
Iniciamos Visual Studio 2012 y creamos un nuevo proyecto:
1. Seleccionar el proyecto Web Visual Studio 2012
2. Seleccionar el FrameWork: 4.5.1
3. Seleccionar la plantilla Aplicación web de ASP.NET MVC 4
4. Asignar el nombre del proyecto
5. Presionar el botón ACEPTAR
Selecciona el tipo
de proyecto
Nombre del
proyecto
Seleccionar e instalar
Instalado el framework, se podrá visualizar los archivos dentro del explorador de soluciones
Estilos de bootstrap
Archivos js
Validaciones y notaciones
Estructura de la clase
producto
En el archivo compartido _Layout.cshtml, agregar los Scripts y Styles del bootstrap, tal como se
muestra
Controlador Home
ActionResult Index
En la ventana del controlador, defina el ActionResult Index, el cual retorna la lista de los
registros de Producto.
Lista de Productos
A continuación agrega una Vista al Action Index, donde seleccionamos la clase Producto y la
plantilla List, tal como se muestra.
Codifica en la vista Index, para trabajar con ventanas modales en los procesos
Etiqueta btnNuevo
Nuevo (Get)
Estructura de datos
Para verificar el proceso, presiona la tecla F5, al presionar el boton Nuevo, se muestra una
ventana modal para el ingreso de productos. Ingrese los datos, al presionar el boton Create, se
cierra la ventana modal y se visualiza la ventana principal con el registro agregado
En el controlador Home, defina la acción Detalle, donde retorna el producto seleccionado por
su campo id, tal como se muestra.
ActionResult Detalle
Defina la vista para la acción Detalle. Selecciona la clase de modelo Producto y la plantilla
Details, tal como se muestra.
Regresamos a la vista Index para agregar el objeto btnDetalle y definimos su evento para
mostrar en la ventana modal los datos del producto seleccionado
Objeto btnDetalle