No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

13 Días
2 Hrs
1 Min
1 Seg
Curso de ASP.NET Core

Curso de ASP.NET Core

Juan Carlos Ruiz

Juan Carlos Ruiz

Validaciones de formularios

27/35
Recursos

Aportes 18

Preguntas 7

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Para mostrar u ocultar el mensaje de éxito, agregué una pequeña modificación que permite mostrar un mensaje de alerta de Bootstrap 4 y en caso de que no exista vacio:

@if (ViewBag.mensaje != null)
{
<div class="alert alert-success" role="alert">
    @ViewBag.mensaje
</div>
}

JC Ruiz: Pues la respuesta esta EN TU CORAZÓN!
Yo: JAJAJAJAJAJA!!

Nunca había visto un framework tan amable con el developer como lo es ASP.Net. Ajua!

Otra manera de hacer el select:

<select asp-for="Journey" asp-items="Html.GetEnumSelectList<JourneyType>()" class="form-control">
                            <option selected="selected" value="">Please select</option>
                        </select>

Se puede mostrar de una manera más visual el error al enviar el formulario si no se llena el campo de nombre simplemente añadiendo el atributo Required a la etiqueta input así:

    <div>
        <label asp-for="Nombre"></label>
        <input asp-for="Nombre" type="text" required/>
    </div>

Se debería ver de esta forma

A mi parecer esto nos puede ahorrar el hacer código de más y es muy útil a la hora de hacer las validaciones que se pueden complementar con el método de ModelState.IsValid que nos indico el profesor.

En mi caso estoy utilizando la opción de VS de crear Controller y Views basados en un Model. Lo cual en la accion Create utiliza:

return RedirectToAction(nameof(Details),kid);

en vez de:

return View("Details", kid);

para este primero se utiliza

TempData["TempMessage"] = "Mensaje desde temp.";

asi como para el segundo se utiliza

ViewData["Mensaje"] = "El niño ha sido creado exitosamente";

Por si a alguien el “ModelState.IsValid” no le valida correctamente los datos que agregamos directamente desde el controlador como el “EscuealId” usen ModelState.Remove(“EscuelaId”) y dejara de validar (ignoro el porqué todos mis datos los valida como si fueran REQUIRED apesar de que no lo son).

Pues ya en este punto estoy viendo los videos y entendiendo, No prestaba atención a los comentarios de los compañeros pero es verdad que termina abrumando un poco y se vuelve solo en copiar y pegar el curso 😦

Escribir el Select con HTML Helpers:

@Html.DropDownList(
  "Jornada",
  Html.GetEnumSelectList<TiposJornada>(),
  "Seleccione una jornada",
  new {@class = "form-control"}
)

Una consulta, cuando uno le esta pasando a un formulario un modelo, por ejemplo, para ser modificado, uno muestra ciertos atributos.
Si realizamos un post, MVC model Binding (entiendo que es esta funcionalidad) bindea las propiedades con los valores mostrados en pantalla.
En caso de tener un objeto complejo, ¿hay forma de que mantenga todo el estado del objeto sin tener que poner todas las propiedades en la pantalla?

Ejemplo del curso:

  1. Tenemos un objeto Curso, se lo pasamos a la View que me permite editar el Nombre.
  2. Realizamos un post, y el objeto Curso no tiene mas la “EscuelaID” puesto que no lo mostramos en la pantalla.
  3. Realizamos el Update de la base de datos en memoria y el ID de la escuela del curso se pierde. (Sea en la base de datos o el objeto que estamos traficando al controller al realizar el post).

Se como solucionarlo, pero me gustaría saber la forma “correcta”.

Gracias.

Buenos días, tan amable alguno me puede colaborar indicándome que podría tener mal en el código me sale este error.

ese model.isvalid() es muy buena opcion para centrar casi toda la valiadacion al modelo.

en este caso no seria mejor un redirect to action en lugar del return de la vista?
es que me pierde un poco que la ruta siga diciendo create

Por alguna razón, el ModelState.IsValid me valida todo el modelo, no sólo los atributos en required, para solventar eso, tuve que setear los demas atributos en [ValidateNever].

Fuente: https://learn.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-7.0#built-in-attributes

namespace Escuela_asp.Models
{
    public class Curso : ObjetoEscuelaBase
    {

        public TiposJornada Jornada { get; set; }

        [ValidateNever]
        public List<Asignatura> Asignaturas{ get; set; }
        [ValidateNever]
        public List<Alumno> Alumnos{ get; set; }

        public string Dirección { get; set; }
        [ValidateNever]
        public string EscuelaId { get; set; }
        [ValidateNever]
        public Escuela Escuela { get; set; }

        [Required]
        public override string Nombre { set; get; }
        //public string Id { get; set; }


    }
} 

Otra manera de hacer el select:

<select asp-for="Jornada" asp-items="Html.GetEnumSelectList<TiposJornada>()" class="form-control">
    <option selected="selected" value="">Seleccionar</option>
</select>

Al formulario de creación de curso le agregue un <select> para la escuela, pero tuve el problema de que no infiere en base al campo EscuelaId el campo Escuela (dejando EscuelaIdcon un id, pero Escuelacomo null), pero si lo hace si antes de guardar en el controller tomo la escuela y lo inserto de nuevo (tomando la escuela con Linq)

Esto es lo que a mi parecer debería inferir y funcionar

<label asp-for="EscuelaId">Escuela</label>
<select class="form-control" asp-for="EscuelaId">
    @foreach (var escuela in ViewBag.escuelas)
    {
        <option value="@escuela.Id">@escuela.Nombre</option>
    }
</select>

Pero tuve que agregar lo siguiente antes de hacer el _context.Cursos.Add(curso);

var escuela = from esc in _context.Escuelas
                          where esc.Id == curso.EscuelaId
                          select esc;
curso.EscuelaId = escuela.FirstOrDefault().Id;

Si alguien tiene una idea de que podría estar pasando, se lo agradezco 😃

Interesante

Muy interesante la clase.