https://www.completecsharptutorial.com/razor-tutorial/
https://docs.microsoft.com/es-es/aspnet/core/mvc/views/razor?view=aspnetcore-3.1#razor-syntax
Vamos a crear una API en c# para que nuestro ejercicio de personas obtenga los datos de ahí.
Sólo tendremos una tabla: Users
Con los datos solicitados en el ejercicio anterior: Foto, nombre completo, mail y dirección
La foto es un enlace (podemos usar los de randompeople o los nuestros propios)
Modificaremos nuestra api redux para que se conecte a la API y comprobemos que está bien
Como realizar una API paso a paso:
Vamos a crear un MVC para mantener una base de datos de partidas de rol y también una web API Rest y un frontend de React que hagan lo mismo.
La base de datos será así:
Jugador: Nombre, mail y alias
Partida: Nombre, juego, fecha y hora, dificultad
Todas las partidas tienen 1 creador.
Los jugadores pueden participar en varias partidas y una partida se compone de varios jugadores.
Tendremos que hacer:
1.- MVC con Code First (recordad en scaffolding)
2.- Web API Rest
3.- Probar API con Postman
4.- Diseñar el frontend, pantallas que tendrá, como se realizarán las acciones
5.- Construir el frontend en React: Crear las rutas, los componentes, hacer las llamadas a la api…
Ponemos lo siguiente en nuestra API:
public void ConfigureServices(IServiceCollection services) { services.AddCors(o => o.AddPolicy("MyPolicy", builder => { builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); })); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); services.AddDbContext<Contexto>(options => options.UseSqlServer(Configuration.GetConnectionString("MVCBasicContext"))); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseHsts(); } app.UseCors("MyPolicy"); app.UseHttpsRedirection(); app.UseMvc(); }
Vamos a crear una API para gestionar los siguientes modelos de datos:
HojaServicio
Id
Fecha
Descripción
Lineas
Id
Servicio
Precio
HojaServicioId
La API debe tener la siguiente funcionalidad:
Hoja/Get/id
Devuelve la fecha, la descripción y el total del precio
Hoja/Get/
Devuelve la lista con el mismo formato que el anterior
Hoja/Fecha/{fecha}
Nos devuelve una lista con las hojas de servicio de esa fecha con el mismo formato que la anterior
El resto (POST/PUT/DELETE) comportamiento habitual.
Lineas/Get/id
Nos devuelve el servicio, el precio y la fecha
Lineas/get
Todas las lineas con el formato anterior
Lineas/Servicio/{Servicio}
Todas las líneas que tengan ese servicio con el formato anterior.
El resto (POST/PUT/DELETE) comportamiento habitual.
Crear una ruta addAll a la que le pasemos lo siguiente:
fecha
descripcion
lista de servicios[{servicio,precio},{servicio,precio},{servicio,precio}]
Y nos cree la hoja de servicios y los servicios asociados
Queremos hacer un MVC para implementar el siguiente modelo ER
El zoo tiene diferentes especies de las que tenemos el nombre común y el científico, una foto y una descripción. Las especies viven en habitats que tienen un nombre, un clima y una vegetación. Cada especie en cada habitat tiene un índice (entero) que es su adecuación al habitat. El zoo tiene diferentes itinerarios que tienen una duración en minutos (entera) un número de visitantes (entero) y una longitud en metros (entero)
Tenemos que hacer un MVC que permita dar de alta todas las entidades, permita asignar especies a habitats, pueda ver para cada itinerario los habitats y las especies que pueda ver, en general lo más completo que podáis.
Si en nuestro MVC queremos ver en el detalle de un registro los registros relacionados en otra entidad a través de una relación N-N lo único que tenemos que hacer es cargarlo en el modelo.
Esto lo hacemos a través de Include y ThenInclude que funcionan como si fueran los joins de una consulta.
En el ejemplo tenemos Comics, que tiene una relación 1-N con Categoría y una N-N con autores. Tendremos un Include para incluir Categoría y poder ver su nombre. Para el caso del Autor usamos Include para incluir ComicAutor y después ThenInclude para incluir Autor. Queda así:
var comic = await _context.Comic
.Include(c => c.Categoria)
.Include(c=>c.ComicAutor)
.ThenInclude(ComicAutor=>ComicAutor.Autor)
.FirstOrDefaultAsync(m => m.Id == id);
Cuando pasamos el modelo a la vista tenemos cargados los datos del comic. En el objeto Categoria los datos de la categoría. En la colección de ComicAutor la lista de elementos de ComicAutor y cada uno de estos elementos tendrá el Autor cargado al completo.
Aunque sólo pasamos un modelo (Comic) Estamos pasando información de cuatro entidades de la base de datos: Comic, Categoria, ComicAutor y Autor.
Para acceder a la información basta acceder a las propiedades de esos objetos. Ejemplo:
Nombre de la categoría: model.Categoria.Nombre
Colección de ComicAutor: Model.ComicAutor
Si recorremos este último
@foreach (var c in Model.ComicAutor)
{
<p>@c.Autor.Nombre (@c.Rol)</p>
}
Crear un controlador ‘Tablas’ Que tenga las siguientes acciones:
Diagonal?lado=xx
Nos dibujará una tabla con 1 en la diagonal principal y aumentando de número en las siguientes diagonales. Ejemplo:
1 | 2 | 3 | 4 |
2 | 1 | 2 | 3 |
3 | 2 | 1 | 2 |
4 | 3 | 2 | 1 |
Aleatorio?lado=xx
Nos dibujará una tabla con valores aleatorios entre 1 y 9. Ejemplo:
1 | 6 | 3 | 5 |
2 | 4 | 2 | 8 |
6 | 2 | 7 | 2 |
2 | 5 | 2 | 9 |
Magico?lado=??
Nos dibujará una tabla con un cuadrado mágico del lado que nos indiquen. Tenemos que comprobar que el lado sea impar. Ejemplo:
4 | 9 | 2 |
3 | 5 | 7 |
8 | 1 | 6 |
Pista: http://www.elguille.info/NET/dotnet/cuadradoMagico.htm
https://codigofacilito.com/articulos/mvc-model-view-controller-explicado
https://docs.microsoft.com/es-es/aspnet/core/tutorials/first-mvc-app/?view=aspnetcore-2.2
https://dl.ebooksworld.ir/motoman/Apress.Pro.ASP.NET.Core.MVC.2.7th.Edition.www.EBooksWorld.ir.pdf