Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso de ASP.NET Core

Curso de ASP.NET Core

Juan Carlos Ruiz

Juan Carlos Ruiz

Segundo Reto

30/35
Recursos

Aportes 15

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

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; }


}

}