Ejemplo de uso para jQuery Unobtrusive Validation:
https://exceptionnotfound.net/asp-net-mvc-demystified-unobtrusive-validation/
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
Juan Carlos Ruiz
Aportes 15
Preguntas 0
Ejemplo de uso para jQuery Unobtrusive Validation:
https://exceptionnotfound.net/asp-net-mvc-demystified-unobtrusive-validation/
validación en modelo curso
![](
validación en vista create curso
![](
![](
Para utilizar las validaciones de Jquery modifiqué el campo nombre, dejo un ejemplo del archivo “/curso/Create.cshtml”
<style>
.invalid-feedback {
display: block; /* Bootstrap oculta este campo a menos que el formulario tenga otras clases, por eso el workaround */
}
</style>
<form method="POST">
<div class="form-row">
<div class="form-group">
@Html.LabelFor(x => x.Nombre)
@Html.TextBoxFor(x => x.Nombre, new { @class = "form-control" } )
<!-- Aca muestra el mensaje de error -->
@Html.ValidationMessageFor(x => x.Nombre, "", new { @class = "invalid-feedback" })
</div>
</div>
<!-- Resto del formulario -->
</form>
Todo bien en las documentaciones de la validacion con jquery, pero me trabo en la parte del web.config ¿Dónde está eso? ¿es parte de algún script o es un script aparte en las carpetas?
el reto es muy largo jajajaja, pero esta bueno para practicar, a darle con el reto.
Excelente la recomendación para validar del lado del cliente usando los modelos ya creados, lo implemente en el proyecto y funciona muy bien.
Excelente!
Utilizando Unobtrusive Validation
No logro que al hacer click en el boton submit solo haga la validación local. Siempre envía los datos al servidor.
Que me recomiendan?
Solución del reto.
Repositorio.
que bueno.
Es StringLength
Agregue en mi vista parcial validaciones por campos asi:
@model SchoolBase
<form asp-action=@ViewData["Method"] method="post">
<input type="hidden" asp-for="Id">
<div class="form-group">
<label asp-for="Name"></label>
<input asp-for="Name" class="form-control">
<span asp-validation-for="Name" class="text-danger"></span>
</div>
@if (Model is Course)
{
var aux = Model as Course;
@Html.Hidden("SchoolId", aux.SchoolId)
<div class="form-group">
@Html.LabelFor(model => aux.Address)
@Html.TextBox("Address", aux.Address, null, new { @class = "form-control"})
@Html.ValidationMessage("Address", null, new { @class = "text-danger" })
</div>
<div class="form-group">
@Html.LabelFor(model => aux.Schedule)
@Html.DropDownList("Schedule", Html.GetEnumSelectList<Schedules>(), null, new { @class="form-control" })
@Html.ValidationMessage("Schedule", null, new { @class = "text-danger" })
</div>
}else if (Model is Student || Model is Subject)
{
var aux = Model as Student;
<div class="form-group">
@Html.LabelFor(model => aux.CourseId)
@Html.DropDownList("CourseId", ViewBag.CourseId, null, new { @class="form-control" })
@Html.ValidationMessage("CourseId", null, new { @class = "text-danger" })
</div>
}
<input type="submit" class="btn btn-success" value="Send">
<a asp-action="Index" class="btn btn-secondary">Return</a>
</form>
Y no pude agregar la importacion de la libreria unobtrusive en la vista parcial por que el diseño de .net core no te permite cargar @section en vistas parciales por lo que tuve que agregar las librerias en las vistas asi
@model Course
@{
ViewData["Title"] = "Create Course";
ViewData["Method"] = "Create";
}
<h1>@ViewData["Title"]</h1>
<partial name="FormSchoolBase" view-data="ViewData" />
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
Aquí mi aporte:
_
Modelo:
_
public class Curso : ObjetoBase
{
[Required(ErrorMessage = "Campo nombre requerido")] // Campo requerido
[StringLength(8)] // Longitud maxima del nombre
[MinLength(3)] // Longitud minima del nombre
///[DivisibleEntreAtributos(ErrorMessage = "Correo no valido")]
public override string Nombre { get; set; } // override: Al ser este un campo virtual de la clase padre, es necesario indicar que vamos a sobre escribir su comportamiento, para eso usamos: override
public string EscuelaId { get; set; } /// Autoaticamente el motor, por convención infiere que me estoy relacionando al 'Id' de la 'Escuela'
public Escuela Escuela { get; set; }
public TiposJornada Jornada { get; set; }
public List<Asignatura> Asignaturas { get; set; }
public List<Alumno> Alumnos { get; set; }
[Display(Prompt = "Dirección correspondencia", Name = "Address")] // Prompt => Marca de agua que describe el contenido en una caja de texto, Name => nombrea mostrar en un label que mapea el campo (Eje:<label asp-for="Dirección"></label>)
[Required(ErrorMessage = "Dirección requerida")] // Campo requerido, con mensaje de exepción personalizado
[MinLength(5, ErrorMessage = "Longitud minima requerida es 5")] // Longitud minima del nombre
public string Dirección { get; set; }
}
_
Vista
_
@using HolaMundoMVC.Models.ModelosProyectoEscuela
@using HolaMundoMVC.Models.ModelosProyectoEscuela.Enumeradores
@model Curso
@{
ViewData["Title"] = "Formulario para la creación de Cursos";
Layout = "_Layout";
}
@*Aquí en Html.Beginform estamos pasando: el nombre de Vista (Índice), el nombre del Controlador (Inicio) y declaramos formMethod = Post Method.*@
@using (Html.BeginForm("CrearCurso", "Curso", FormMethod.Post))
{
<div>
@Html.LabelFor(model => model.Nombre)
@Html.TextBoxFor(model => model.Nombre, new { @class = "form-control"})
@*Aca muestra el mensaje de error -->*@
@Html.ValidationMessageFor(model => model.Nombre, "", new { @class = "text-danger" })
@*<label asp-for="Nombre"> </label>
<input asp-for="Nombre" />*@
</div>
<div>
<label asp-for="Dirección"></label>
<input asp-for="Dirección" />
</div>
<div>
<label asp-for="Jornada"></label>
<!-- Usamos los HTML Helpers, para mostrar una lista desplegable en la interfaz con los tipo de la enumeración correspondiente -->
@Html.DropDownList(
"JornadasCursos", /// Nombre de la lista
Html.GetEnumSelectList<TiposEntesSistema.TiposJornada>(), /// Enumeración asociada a la lista
"Seleccionar Jornada", /// Item por defecto de la lista
new {@class = "form-control"} /// Estilo de la lista (usamos una clase de bootstrap)
)
<br>
</div>
<input type="submit">
}
<p><i>@ViewBag.Fecha</i></p>
Asignatura:
namespace platzi_asp_net_core.Models
{
public class Curso:ObjetoEscuelaBase
{
[Required(ErrorMessage = “El nombre del curso es requerido”)]
[StringLength(5)]
public override string Nombre { get; set; }
public TiposJornada Jornada { get; set; }
public List<Asignatura> Asignaturas{ get; set; }
public List<Alumno> Alumnos{ get; set; }
[Display(Prompt = "Direccion correspondencia", Name="Addre" )]
[Required(ErrorMessage= "Se requiere incluir una direccion")]
[MinLength(10, ErrorMessage="La longitud minima de la direccion es 10")]
public string Dirección { get; set; }
public string EscuelaId { get; set; }
public Escuela Escuela { get; set; }
}
}
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?