0% encontró este documento útil (0 votos)
43 vistas17 páginas

Guía de Proyecto .NET MVC Avanzado

Este documento describe cómo crear un proyecto web ASP.NET MVC con modelos complejos y herencias. Inicialmente, crea las clases de modelo Persona, Profesor, Curso, ActividadesOficina, Departamento, Estudiante e Inscripción. Luego genera los controladores correspondientes a cada modelo. Finalmente, explica cómo crear las migraciones de base de datos y modificar la navegación.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
43 vistas17 páginas

Guía de Proyecto .NET MVC Avanzado

Este documento describe cómo crear un proyecto web ASP.NET MVC con modelos complejos y herencias. Inicialmente, crea las clases de modelo Persona, Profesor, Curso, ActividadesOficina, Departamento, Estudiante e Inscripción. Luego genera los controladores correspondientes a cada modelo. Finalmente, explica cómo crear las migraciones de base de datos y modificar la navegación.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Proyecto Web .

NET MVC con modelos complejos y herencias

Como nota inicial, estoy usando la versión 16.5.1 de visual studio 2019, no se cuando salió, pero si algo no les funcionan
actualicen su versión.

Al abrir Visual Studio 2019, aparecerá la siguiente pantalla donde se debe elegir “Crear un proyecto”:

Para filtrar de aplicación ASP .NET (.NET Framework) usaremos la búsqueda “MVC”
El nombre del proyecto será “tsw20”, algo importante a considerar es: el tipo de proyecto requiere como mínimo .NET
Framework 4.5, pero el que aparezca por default superior a 4.5 es suficiente.

Nuestro tipo de proyecto debe ser MVC ya que hay muchas posibilidades en un proyecto de este tipo.

No usaremos autenticación.
Sobre la carpeta “Models”, hay que agregar clases para cada uno de los 7 modelo, por ejemplo:

Sobre “Models” se despliega el menú contextual presionando el botón derecho del mouse, sobre él, se selecciona
“Agregar” y del sub menú, se selecciona “Clase”
Clase Persona

La primera clase se llamará “Persona”

Y contendrá este código:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;

namespace modeloComplejo.Models
{
public class Persona
{
public int ID { get; set; }

[Required(ErrorMessage = "El Nombre es obligatorio")]


[StringLength(50, ErrorMessage = "Maximo 50 caracteres en el nombre.")]
[Column("Nombre")]
[Display(Name = "Nombres")]
public string Nombre { get; set; }

[Required(ErrorMessage = "El Apellido es obligatorio")]


[StringLength(50, ErrorMessage = "Maximo 50 caracteres en el apellido.")]
[Display(Name = "Apellidos")]
public string Apellido { get; set; }

[Display(Name = "Nombre Completo")]


public string NombreCompleto
{
get
{
return Apellido + ", " + Nombre;
}
}

}
}
Clase Profesor

La segunda clase se llamará “Profesor”

Y contendrá este código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace modeloComplejo.Models
{
public enum Titulo
{
Licenciado, Ingeniero, Maestro, Doctor
}

public class Profesor : Persona


{
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Display(Name = "Fecha de Contratacion")]
public DateTime FechaContratacion { get; set; }

[DisplayName("Grado Academico")]
public Titulo? Titulo { get; set; }

// public virtual ICollection<Curso> Cursos { get; set; }


// public virtual ActividadesOficina actividadesOficina { get; set; }

}
Clase Curso

La cuarta clase se llamará “Curso”

Y contendrá este código:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;

namespace modeloComplejo.Models
{
public class Curso
{
public int ID { get; set; }

[StringLength(50, MinimumLength = 3)]


[DisplayName("Nombre del curso")]
public string NombreCurso { get; set; }

[Range(0, 5)]
public int Creditos { get; set; }

public int? DepartmentID { get; set; }

// public virtual Departamento Departmento { get; set; }


// public virtual ICollection<Inscripcion> Inscripciones { get; set; }
// public virtual ICollection<Profesor> Profesores { get; set; }

}
}
Clase ActividadesOficina

La tercera clase se llamará “ActividadesOficina”

Y contendrá este código:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;

namespace modeloComplejo.Models
{
public class ActividadesOficina
{
[Key]
[ForeignKey("Profesor")]
public int ProfesorID { get; set; }

[StringLength(50)]
[Display(Name = "Ubicacion de Oficina")]
public string Ubicacion { get; set; }

// public virtual Profesor Profesor { get; set; }


}
}
Clase Departamento

La quinta clase se llamará “Departamento”

Y contendrá este código:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;

namespace modeloComplejo.Models
{
public class Departamento
{
public int ID { get; set; }

[StringLength(50, MinimumLength = 3)]


[DisplayName("Nombre del Departamento")]
public string Name { get; set; }

[DataType(DataType.Currency)]
[Column(TypeName = "money")]
public decimal Presupuesto { get; set; }

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Display(Name = "Fecha de inicio")]
public DateTime FechaInicio { get; set; }

public int? ProfesorID { get; set; }

/*[Timestamp]
public byte[] RowVersion { get; set; }*/

// public virtual Profesor Administrador { get; set; }


// public virtual ICollection<Curso> Cursos { get; set; }

}
}
Clase Estudiante

La Sexta clase se llamará “Estudiante”

Y contendrá este código:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace modeloComplejo.Models
{
public class Estudiante : Persona
{
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Display(Name = "Fecha de Inscripcion")]
public DateTime FechaInscripcion { get; set; }

// public virtual ICollection<Inscripcion> Inscripcion { get; set; }


}

}
Clase Inscripcion

La Septima clase se llamará “Inscripcion”

Y contendrá este código:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace XApr17.Models
{
public enum Calificacion
{
reprobado = 0,
suficiente = 70,
regular = 80,
bueno = 90,
excelente = 100
}

public class Inscripcion


{
public int ID { get; set; }

[DisplayName("Curso")]
public int? CursoID { get; set; }

[DisplayName("Alumno")]
public int? EstudianteID { get; set; }

[DisplayFormat(NullDisplayText = "Sin Calificacion")]


public Calificacion? Calificacion { get; set; }

// public virtual Curso curso { get; set; }


// public virtual Estudiante estudiante { get; set; }

}
}
Controladores

Antes iniciar con la creación de controladores, debemos compilar el proyecto:

Se deben crear controladores para:

1. Profesor
2. ActividadesOficina
3. Departamento
4. Estudiante
5. Curso
6. Inscripcion

El modelo Persona no tendrá controlador ya que es una super Modelo del cual heredan otros modelos.

Sobre la carpeta “Controllers” se despliega el menú contextual presionando el botón derecho del mouse, sobre él, se
selecciona “Agregar” y del sub menú, se selecciona “Controlador”

Todos los controladores que creemos serán “Controlador de MVC 5 con vistas que usan Entity Framework”
DepartamentosController

Este será el primer controlador a crear y por lo tanto al momento de que pregunte los datos debemos especificar “Clase
Modelo”, habilitar “Usar acciones de controlador asíncrono” y como nombre “DepartamentosController”.

Necesitamos crear un contexto de datos, pero no tenemos ninguno, presionaremos el botón “+” marcado en rojo y
automáticamente generar un contexto el cual usaremos en los siguientes controladores.

Al crear el primer controlador y contexto, hará una pequeña descarga, sean pacientes.

Antes de continuar con la creación de controladores, debemos compilar el proyecto:


ProfesoresController

Debemos especificar “Clase Modelo”, habilitar “Usar acciones de controlador asíncrono” y como nombre
“ProfesoresController”.

ActividadesController

Debemos especificar “Clase Modelo”, habilitar “Usar acciones de controlador asíncrono” y como nombre
“ActividadesController”.
EstudiantesController

Debemos especificar “Clase Modelo”, habilitar “Usar acciones de controlador asíncrono” y como nombre
“EstudiantesController”.

CursosController

Debemos especificar “Clase Modelo”, habilitar “Usar acciones de controlador asíncrono” y como nombre
“CursosController”.
InscripcionesController

Debemos especificar “Clase Modelo”, habilitar “Usar acciones de controlador asíncrono” y como nombre
“InscripcionesController”.

Creando Migraciones y BD

Para crear las migraciones y la bd, debemos entrar a la “Consola del Administrador de paquete” de Nuget
Dentro debemos escribir estos comandos:

Modificando la Navegacion

Para poder invocar una vista es necesario usar el tag: @Html.ActionLink

Su formato es el siguiente:
@Html.ActionLink(“Texto a mostrar”,”Nombre del método ActionResult”,”Nombre del Controlador sin la
palabra Controller”)

Para realizar las invocaciones en la barra de navegación, primero debemos abrir la vista:
“/Views/Shared/_Layout.cshtml”

Y colocar el siguiente contenido agregando o sustituyendo las secciones diferentes:


Hagan sus pruebas :D

También podría gustarte