Otra forma es esta:
[Route("Asignatura/Index/{asignaturaId?}")]
Introducción a ASP.NET Core
Todo lo que aprenderás sobre ASP.NET Core
Herramientas y prerrequisitos
La importancia del middleware en el entorno web
Mi primera aplicación ASP.Net Core
Habilitar certificados, planillas preinstaladas
Revisión detalladas de la estructura de directorios
¿Qúé es el patrón MVC?
Nuestro Proyecto
Modelo Vista Controlador a nivel básico
Vista y controlador
Modelo a nivel básico
Razor Syntax
Vistas Plantillas y modelo
Vistas, plantillas, Archivos de inicio
Importación de modelos
Vistas para listar asignaturas
Vistas parciales
Mostrando otras listas de objetos
Actualizando la versión de bootstrap
Entity Framework Core
Introducción a entity framework
Conectando la solución con Entity Framework Core
Sembrando datos en la base de datos
Optimizando siembra de datos
Refactoring del Modelo para un ORM
Implementando cambios en el modelo
Refactoring siembra de datos
Ajuste de vistas y formularios
Ajuste de enrutamiento
Ajuste de vistas y controladores
Creando un formulario
Validaciones de formularios
Tu primer Reto
Atributos de validación y bases de datos
Data annotations
Segundo Reto
Usando una Base de Datos de verdad
Diseño de vistas y controladores optimizado
Scaffolding o borrón y cuenta nueva
Tercer Reto
Deploy del sitio
Publicando el website
Conclusiones
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 21
Preguntas 5
Otra forma es esta:
[Route("Asignatura/Index/{asignaturaId?}")]
otra manera de de menejar el comportamiento de index sin tener que poner los enrutamientos puede ser asi:
public IActionResult Index(String? asignaturaId){
if(!string.IsNullOrWhiteSpace(asignaturaId){
.......
}else{
........
}
}
De igual modo podemos usar atributos para los métodos Http ([HttpGet], [HttpPost], [HttpPut], [HttpDelete]) y seguir usando el método Index para ambas acciones, eliminando el método MultiAsignaturas y llamando el atributo Route ([Route("[controller]")]) desde la clase, con eso me quedó así::
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using ProyectoEscuela.Models;
namespace ProyectoEscuela
{
[Route("[controller]")]
public class AsignaturaController: Controller
{
private EscuelaContext _context;
public AsignaturaController(EscuelaContext context){
_context = context;
}
[HttpGet]
public IActionResult Index(){
ViewBag.Fecha = DateTime.UtcNow.ToString();
return View("MultiAsignatura",_context.Asignaturas);
}
[HttpGet("{asignaturaId}")]
public IActionResult Index(string asignaturaId){
var asignatura = from asig in _context.Asignaturas
where asig.Id == asignaturaId
select asig;
return View(asignatura.SingleOrDefault());
}
}
}
Aunque no sé que tan correcto sea hacerlo de esa manera 😅
Agregué una validación porque se puede dar el caso donde el parámetro no sea null y que el query no encuentre la asignatura
if (!string.IsNullOrWhiteSpace(asignaturaId))
{
var asignatura = from asig in _context.Asignaturas
where asig.Id == asignaturaId
select asig;
return asignatura.Any() ? View(asignatura.SingleOrDefault()) : View("MultiAsignatura", _context.Asignaturas.ToList());
}
También usando el decorador [Route] con otra ruta se puede hacer sobracarga del método Index.
Sería algo así:
[Route("Asignatura/Index")]
public IActionResult Index()
{
return View(_context.Asignaturas.FirstOrDefault() );
}
[Route("Asignatura/Index/{asignaturaId}")]
public IActionResult Index(string asignaturaId)
{
var asignatura = from asig in _context.Asignaturas where asig.Id == asignaturaId select asig;
return View(asignatura.SingleOrDefault() );
}
otra forma es usar:
return RedirectToAction(“MultiAsignatura”, “Asignatura”);
public IActionResult Index(string asignaturaId)
{
if(string.IsNullOrWhiteSpace(asignaturaId)){
// LLAMA A OTRA VISTA
return RedirectToAction("MultiAsignatura","Asignatura");
}else{
var asignatura = from asig in _context.asignaturas
where asig.Id == asignaturaId select asig;
ViewBag.fecha= DateTime.Now;
return View(asignatura.SingleOrDefault());
}
}
una forma mas sencilla de hacer el “query”
var asignatura = _context.Asignaturas.Where(asignatura=> asignatura. Id == asignaturaId).FirstOrDefault();
[Route(“Asignatura/Index/{AsignaturaID?}”)]
Para manejar múltiples parámetros, se puede realizar lo siguiente:
[Route("Asignatura/Index/{asignaturaId}/{apiKey}")]
public IActionResult Index(string asignaturaId, string apiKey)
{
...
}
Ejemplo de Llamada de la acción :
Asignatura/Index/6cf7e4c6-f185-47e5-bd00-ee243c8280d4/APIKEYVALUE
Es normal o recomendable utilizar == en lugar del equals para comparar Strings?
Muy interesante esta clase.
public IActionResult Index(string asignaturaId)
{
var asignatura = from asign in _context.Asignaturas
where asign.Id == asignaturaId
select asign;
return View(asignatura.SingleOrDefault());
}
usando lamda
var subject = _context.Subjects.FirstOrDefault(sub => sub.UniqueId == subjectId);
Excelente
si no manda ningun parametro no seria mejor que muestre una pagina de 404 Not found ??
La respuesta esta en tu corazon… JAJAJAJAJA
<code>
Genial ! Esto hace mas dinamicos los actions en los controladores
Si les falla el enrutamiento, prueben con esta forma:
[Route("Asignatura/{id?}", Name = "Index")]
Excelente ajuste en la navegación para mostrar datos correspondientes y adecuados según cada ruta
interesante el manejo de rutas en mvc.
Veo que la parte de la parte seguridad , no lo toca el profesor, ni validacion por token confimacion de email cosas muy importante que deberiamos de ver
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?