6

Digamos que tengo A ViewModel compuesto por otros 3 modelos de vista. Uno contiene una lista de elementos, el otro contiene una instancia de una clase con un atributo [Requerido] y luego otra lista de otros elementos.MVC 3 ModelState.IsValid con múltiples ViewModels

Si el usuario selecciona de uno de los elementos en cualquiera de las dos listas, no quiero que el atributo [Obligatorio] en el segundo objeto cause que el ModelState sea inválido, porque si el usuario selecciona uno de esos elementos no necesitarán completar el formulario con el artículo con el atributo [Requerido].

¿Cómo puedo resolver este problema?

Respuesta

5

Una opción es eliminar la validación "ofensiva" utilizando ModelState.Remove ("KeyName"). Tengo exactamente el mismo escenario y han puesto en práctica lo siguiente:

var MyModel = _someService.GetModelById(id); 
TryUpdateModel(MyModel); 
ModelState.Remove("MyModel.OffendingField"); 
if (ModelState.IsValid) 
{ 
    ... 
} 

embargo, es importante que se asegure de que esto no tendrá un efecto en cadena en otras áreas de su código.

+0

Creo que en lugar de validar todo el modelo de vista, haré lo que sugiera y condicionalmente validaré los modelos que se vean afectados por la selección de los usuarios. Además, esto me hizo reconsiderar el diseño de la aplicación y, afortunadamente, he encontrado algunas formas mejores de manejarlo para que este no sea un problema. – ewahner

Cuestiones relacionadas