Estamos trabajando en algo propio llamado KODOTI. Click para unirte
Se viene KODOTI. Únete

ASP.NET MVC: Validando un formulario y eliminando registros

En esta cuarta entrada vamos a validar un formulario usando los Data Annotations e implementar el botón eliminar que habíamos dejado pendiente.

Rodríguez Patiño, Eduardo
24,863 lecturas
Rodríguez Patiño, Eduardo
Hemos migrado hace poco nuestras publicaciones del blog antiguo. Si crees que esta se encuentra incompleta o sin coherencia deja un comentario para restaurarla manualmente.

Validación de formulario

El objetivo de esta entradano es detallar los tipos de validaciones que podemos hacer con los Data Annotations, sino, como implementarlo desde nuestro modelo y mostrar los mensajes de validación en los formularios usando ASP.NET MVC. Por lo tanto, para ver tipos de validaciones y validaciones personalizadas, creo yo que demanda una nueva entrada.

Validando nuestro modelo

Para comenzar a validar nuestro formulario previamente debemos asignar Data Annotations a nuestro modelo actual, para que al momento de procesar la información ya sea para actualizar/eliminar un registro este lo valide previamente.

Entonces, tenemos nuestro siguiente modelo y anotaciones:

[Table("Alumno")]
public partial class Alumno
{
    public Alumno()
    {
        Cursos = new List<Curso>();
    }

    public int id { get; set; }

    [Required(ErrorMessage = "Debe ingresar un nombre")]
    [StringLength(50)]
    public string Nombre { get; set; }

    [Required(ErrorMessage = "Debe ingresar un apellido")]
    [StringLength(100)]
    public string Apellido { get; set; }

El Entity Framework Tools nos va ayudar en este aspecto, por eso creamos una buena base de datos para que al momento generar las clases de nuestro modelo, este agregue las Data Annotations necesarias.

Agregando los mensajes a nuestro formulario

Para agregar los mensajes de nuestras anotaciones debemos llamar a la clase Html y al método ValidationMessageFor, este debemos ubicarlo donde nos gustaría visualizarlo, yo en mi caso lo he agregado debajo de los controles y adicionalmente le he puesto una clase de bootstrap para mostrar el texto con fondo rojo y letras blanca "label label-danger".

<div class="panel panel-default">
    <div class="panel-heading">Información personal</div>
    <div class="panel-body">
    <div class="form-group">
        @Html.LabelFor(x => x.Nombre)
        @Html.TextBoxFor(x => x.Nombre, new { @class = "form-control" })
        @Html.ValidationMessageFor(x => x.Nombre, null, new { @class = "label label-danger" })
    </div>
    <div class="form-group">
        @Html.LabelFor( x => x.Apellido)
        @Html.TextBoxFor(x => x.Apellido, new { @class = "form-control" })
        @Html.ValidationMessageFor(x => x.Apellido, null, new { @class = "label label-danger" })
    </div>
    </div>
</div>

Validando desde el controlador

En nuestra acción Guardar debemos preguntar si el modelo actual es válido, del caso contrario volveremos a cargar la vista del formulario para que los mensajes de validación sean mostrados.

public ActionResult Guardar(Alumno model, int[] cursos = null) 
{
    if (cursos != null)
    {
        foreach (var c in cursos)
            model.Cursos.Add(new Curso { id = c });
    }
    else 
    {
        ModelState.AddModelError("cursos", "Debe seleccionar por lo menos un curso");
    }

    if (ModelState.IsValid)
    {
        model.Guardar();
        return Redirect("~/home/crud/" + model.id);
    }
    else 
    {
        ViewBag.Cursos = curso.Todo();
        return View("~/views/home/crud.cshtml", model);
    }
}

Validando que por lo menos se haya elegido un curso

Lo que vamos hacer a continuación es una forma rápida de crear una validación personalizada, para ello vamos a crear en nuestro formulario una validación personalizada definiendo una Key debajo de nuestra lista de cursos a seleccionar.

@Html.ValidationMessage("CursosSeleccionados", new { @class = "label label-danger" })

De esta manera, nuestro formulario ya sabe que debe mostrar alguna información para la Key "CursosSeleccionados", entonces validamos en nuestra acción que se haya seleccionado por lo menos un curso.

if (cursos != null)
{
    foreach (var c in cursos)
        model.Cursos.Add(new Curso { id = c });
}
else 
{
    ModelState.AddModelError("CursosSeleccionados", "Debe seleccionar por lo menos un curso");
}

Por ende, al no pasar esta validación, nuestro mensaje será mostrado en el formulario.

NOTA: en el VIDEO yo he puesto para la validación de cursos la Key "cursos", pero hay un problema ya que tenemos una propiedad llamada Cursos, así que, la solución es agregar otro nombre que no coincida con nuestras propiedades.

Eliminando un registro

Hemos agregado a nuestro formulario actual un botón que apunta a una acción llamada Eliminar en la cual le pasamos el ID del registro que queremos remover de la base de datos.

Acción

public ActionResult Eliminar(int id)
{
    alumno.Eliminar(id);
    return Redirect("~/home");
}

Formulario

@if (Model.id > 0)
{
    <a href="~/home/eliminar/@Model.id" class="btn btn-danger">Eliminar</a>
}

Modelo

public void Eliminar(int id)
{
    try
    {
        using (var context = new TestContext())
        {
            context.Entry(new Alumno { id = id }).State = EntityState.Deleted;
            context.SaveChanges();
        }
    }
    catch (Exception e)
    {
        throw new Exception(e.Message);
    }
}

Partes

¿Te gustó nuestra publicación?
Suscríbete a nuestro boletín