Buscar..


Validar modelo en ActionResult

[HttpPost]
public ActionResult ContactUs(ContactUsModel contactObject)
{
    // This line checks to see if the Model is Valid by verifying each Property in the Model meets the data validation rules
    if(ModelState.IsValid)
    {
    }
    return View(contactObject);
}

La clase modelo

public class ContactUsModel
{
    [Required]
    public string Name { get; set; }
    [Required]
    [EmailAddress] // The value must be a valid email address
    public string Email { get; set; }
    [Required]
    [StringLength(500)] // Maximum length of message is 500 characters
    public string Message { get; set; }
}

Eliminar un objeto de la validación

Digamos que tienes el siguiente modelo:

public class foo
{
    [Required]
    public string Email { get; set; }

    [Required]
    public string Password { get; set; }

    [Required]
    public string FullName { get; set; }
}

Pero desea excluir FullName de la validación del modelo porque está utilizando el modelo también en un lugar donde FullName no está completo, puede hacerlo de la siguiente manera:

ModelState.Remove("FullName");

Mensajes de error personalizados

Si desea proporcionar mensajes de error personalizados, lo haría así:

public class LoginViewModel
{
    [Required(ErrorMessage = "Please specify an Email Address")]
    [EmailAddress(ErrorMessage = "Please specify a valid Email Address")]
    public string Email { get; set; }
    
    [Required(ErrorMessage = "Type in your password")]
    public string Password { get; set; }
}

Cuando sus mensajes de error están en un archivo de recursos (.resx), debe especificar el tipo de recurso y el nombre del recurso:

public class LoginViewModel
{
    [Required(ErrorMessageResourceType = typeof(ErrorResources), ErrorMessageResourceName = "LoginViewModel_RequiredEmail")]
    [EmailAddress(ErrorMessageResourceType = typeof(ErrorResources), ErrorMessageResourceName = "LoginViewModel_ValidEmail")]
    public string Email { get; set; }
    
    [Required(ErrorMessageResourceType = typeof(ErrorResources), ErrorMessageResourceName = "LoginViewModel_RequiredPassword")]
    public string Password { get; set; }
}

Creando mensajes de error personalizados en el modelo y en el controlador

Digamos que tienes la siguiente clase:

public class PersonInfo
{
    public int ID { get; set; }

    [Display(Name = "First Name")]
    [Required(ErrorMessage = "Please enter your first name!")]
    public string FirstName{ get; set; }

    [Display(Name = "Last Name")]
    [Required(ErrorMessage = "Please enter your last name!")]
    public string LastName{ get; set; }

    [Display(Name = "Age")]
    [Required(ErrorMessage = "Please enter your Email Address!")]
    [EmailAddress(ErrorMessage = "Invalid Email Address")]
    public string EmailAddress { get; set; }
}

Estos mensajes de error personalizados aparecerán si su ModelState.IsValid devuelve falso.

Pero tanto usted como yo sabemos que solo puede haber 1 dirección de correo electrónico por persona, o bien enviará correos electrónicos a personas potencialmente equivocadas y / o varias personas. Aquí es donde entra en juego el control del controlador. Así que asumamos que las personas están creando cuentas para que las guarde a través de Crear acción.

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID, FirstName, LastName, EmailAddress")] PersonInfo newPerson)
{
    if(ModelState.IsValid) // this is where the custom error messages on your model will display if return false
    {
        if(database.People.Any(x => x.EmailAddress == newPerson.EmailAddress))  // checking if the email address that the new person is entering already exists.. if so show this error message
        {
            ModelState.AddModelError("EmailAddress", "This email address already exists! Please enter a new email address!");
            return View(newPerson);
        }
        
        db.Person.Add(newPerson);
        db.SaveChanges():
        return RedirectToAction("Index");
    }

    return View(newPerson);
}

Espero que esto sea capaz de ayudar a alguien!

Validación de modelos en JQuery.

En los casos en que necesite asegurar la validación del modelo utilizando Jquery, se puede usar la función .valid ().

Los campos de la clase modelo.

[Required]
[Display(Name = "Number of Hospitals")]
public int Hospitals{ get; set; }
[Required]
[Display(Name = "Number of Beds")]
public int Beds { get; set; }

El código de vista

@using (Html.BeginForm(new {id = "form1", @class = "form-horizontal" }))
{

<div class="divPanel">
  <div class="row">
    <div class="col-md-3">                
            @Html.LabelFor(m => m.Hospitals)
            @Html.TextBoxFor(m => m.Hospitals, new { @class = "form-control", @type = "number"})
            @Html.ValidationMessageFor(m => m.Hospitals)

    </div>
    <div class="col-md-3">

            @Html.LabelFor(m => m.Beds)
            @Html.TextBoxFor(m => m.Beds, new { @class = "form-control", @type = "number"})
            @Html.ValidationMessageFor(m => m.Beds)
    </div>
<div class="col-md-3">             
        <button type=button  class="btn btn-primary" id="btnCalculateBeds"> Calculate Score</button>
    </div>
 </div>

  </div>
 }

El script para la verificación de validación.

$('#btnCalculateBeds').on('click', function (evt) {
evt.preventDefault();

if ($('#form1').valid()) {
//Do Something.
}
}

Asegúrese de que los archivos jquery.validate y jquery.validate.unobtrusive estén presentes en la solución.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow