una nxm mostrar matriz matrices leer hacer enteros cargar arreglos 2x2 c# .net asp.net-mvc asp.net-mvc-3 model-validation

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; } }