Saltar al contenido

Validar modelo en específico string valores

La guía o código que encontrarás en este post es la resolución más eficiente y válida que encontramos a esta duda o problema.

Solución:

En caso de que alguien tropiece con este hilo en el futuro, lo llevé un poco más lejos y agregué un mensaje público. string array propiedad que acepta los valores permitidos en el filtro de validación. Esto le permitirá proporcionar una colección de cadenas válidas en el attribute decorador.

De esta manera, ahora tiene un genérico reutilizable attribute puede usar en cualquier momento para limitar un modelo string propiedad a un conjunto predefinido de valores. Ya que es una validación attributetambién puede decorarlo con un mensaje de error más informativo.

Ejemplo de uso:

public class Person 
    [StringRange(AllowableValues = new[]  "M", "F" , ErrorMessage = "Gender must be either 'M' or 'F'.")]
    public string Gender  get;set; 

Atributo de cadena:

public class StringRangeAttribute : ValidationAttribute

    public string[] AllowableValues  get; set; 

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    
        if (AllowableValues?.Contains(value?.ToString()) == true)
        
            return ValidationResult.Success;
        

        var msg = $"Please enter one of the allowable values: string.Join(", ", (AllowableValues ?? new string[]  "No allowable values found" )).";
        return new ValidationResult(msg);
    

Para validar la propiedad Sexo he creado una validación personalizada attribute creando una nueva clase (attribute):

using System;
using System.Collections.Generic;
using System.Web;
using System.ComponentModel.DataAnnotations;    

namespace MyProject.Models.Validation


    public class StringRangeAttribute : ValidationAttribute
    
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        

            if(value.ToString() == "M" 
    

puedes usar una expresión regular como esta:

[RegularExpression("M|F", ErrorMessage = "The Gender must be either 'M' or 'F' only.")]
public string Gender  get; set; 

pero en mi api mostrará un mensaje de error cuando pasé datos para que pueda agregar

[StringLength(1, MinimumLength = 1, ErrorMessage = "The Gender must be 1 characters.")]

codigo final:

[StringLength(1, MinimumLength = 1, ErrorMessage = "The Gender must be 1 characters.")]
[RegularExpression("M|F", ErrorMessage = "The Gender must be either 'M' or 'F' only.")]
public string Gender  get; set; 

Comentarios y valoraciones del tutorial

Si piensas que ha sido provechoso nuestro artículo, sería de mucha ayuda si lo compartieras con más programadores de esta forma nos ayudas a dar difusión a nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *