Detectar campo faltante cuando Model State IsValid es false

 

Cuando se desarrolla en MVC tenemos el Modelo, Vista y el Controlador este último se encarga de toda lógica que se envía directo a la vista.

En algunas ocasiones necesitamos actualizar ciertos campos dentro de alguna tabla de nuestra base de datos y nos encontramos con ciertos problemas en los cuales se ve involucrado el ModelState

Como lo veremos en el siguiente ejemplo:

Aquí tenemos el Model del ejemplo:

 

Donde se puede observar que la columna FileName es Requerida

public class Document

{

public int Id { get; set; }

 

[Required(ErrorMessageResourceType = typeof(DocumentResource),

ErrorMessageResourceName = “FileNameError”)]

[Display(Name = “FileName”, ResourceType = typeof(DocumentResource))]

public string FileName { get; set; }

 

public DateTime DateCreated { get; set; }

 

public string CreatedBy { get; set; }

 

}

 

Aqui tenemos el Controller.

public ActionResult Create([Bind(Include = “FileName,DateCreated,CreatedBy”)] Document document)

{

if (ModelState.IsValid)

{

document.DateCreated = DateTime.Now;

document.CreatedBy = “juan perez”;

 

db.Documents.Add(document);

db.SaveChanges();

return RedirectToAction(“Index”);

}

 

return View(document);

}

En este método tenemos que recibe los campos de Id, Name, UserId, DateCreated y CreatedBy

El problema viene aquí en la vista cuando consume el controller de Create. Y está esperando recibir todas las columnas que sean requeridas y si hace falta alguna y el ModelState será False (Para este ejemplo no se está enviando la columna FileName que es requerida)

 

Si deseamos saber el por qué el Model State es False tan solo debemos colocar la siguiente consulta y nos detallara el problema por el cual el ModelState es false.

     var errors = ModelState.Where(x => x.Value.Errors.Count > 0)

              .Select(x => new { x.Key, x.Value.Errors })

              .ToArray();

 

Aquí podemos ver con la consulta el campo que ocasiona la excepción por la cual el ModelState es False

 

Y aquí el detalle con el campo.

Share: