mostrar - matriz nxm en c#
La matriz debe contener 1 elemento (5)
Tengo la siguiente clase:
public class CreateJob
{
[Required]
public int JobTypeId { get; set; }
public string RequestedBy { get; set; }
public JobTask[] TaskDescriptions { get; set; }
}
Me gustaría tener una anotación de datos arriba de TaskDescriptions
para que la matriz contenga al menos un elemento. Al igual que [Required]
. es posible?
Aquí hay una versión un poco mejorada de la solución @dove que maneja diferentes tipos de colecciones, como HashSet, List, etc.
public class MustHaveOneElementAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
var collection = value as IEnumerable;
if (collection != null && collection.GetEnumerator().MoveNext())
{
return true;
}
return false;
}
}
El atributo MinLength considera que el valor es válido si es nulo. Por lo tanto, simplemente inicialice su propiedad en el modelo como una matriz vacía y funcionará.
MinLength(1, ErrorMessageResourceName = nameof(ValidationErrors.AtLeastOneSelected), ErrorMessageResourceType = typeof(ValidationErrors))]
int[] SelectedLanguages { get; set; } = new int[0];
He visto un atributo de validación personalizado utilizado para esto antes, como este:
(He dado una muestra con una lista, pero podría adaptarse a la matriz o podría usar la lista)
public class MustHaveOneElementAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
var list = value as IList;
if (list != null)
{
return list.Count > 0;
}
return false;
}
}
[MustHaveOneElementAttribute (ErrorMessage = "At least a task is required")]
public List<Person> TaskDescriptions { get; private set; }
Permítame una nota al margen sobre el uso de MinLengthAttribute con .NET Core.
Microsoft recomienda usar Razor Pages a partir de .NET Core 2.0.
Actualmente, la validación con MinLengthAttribute en una propiedad dentro de PageModel no funciona:
[BindProperty]
[Required]
[MinLength(1)]
public IEnumerable<int> SelectedStores { get; set; }
ModelState.IsValid devuelve verdadero cuando SelectedStores.Count () == 0.
Probado con .NET Core 2.1 Preview 2.
Se puede hacer usando el atributo de validación de atributo estándar de MinLengthAttribute, pero funciona SOLAMENTE para matrices:
public class CreateJob
{
[Required]
public int JobTypeId { get; set; }
public string RequestedBy { get; set; }
[MinLength(1)]
public JobTask[] TaskDescriptions { get; set; }
}