¿Fue útil?

Solución

Una vez que haya eliminado los elementos infractores, borre ModelState y valide nuevamente, así:

ModelState.Clear();
TryValidateModel(crew);  // assumes the model being passed is named "crew"

Nota : Tenga cuidado cuando use el método TryValidateModel porque este método no valida el objeto anidado del modelo (como lo menciona @Merenzo).

Otros consejos

Llegó tarde al juego, pero aún así: También estaba buscando una manera de validar el modelo después de hacerle algunos ajustes (más precisamente, a los elementos de su colección anidada), y TryValidateModel no funcionó para mí, ya que noprocesar objetos anidados.

Finalmente, me decidí por la carpeta de modelos personalizados:

public class MyItemModelBinder : DefaultModelBinder
{
    protected override void OnModelUpdated(
        ControllerContext controllerContext, 
        ModelBindingContext bindingContext)
    {
        if (bindingContext.ModelType == typeof(MyItemModel))
        {
            MyItemModel item = (MyItemModel)bindingContext.Model;
            //do required tweaks on model here 
            //(I needed to load some additional data from DB)
        }
        //validation code will be called here, in OnModelUpdated implementation
        base.OnModelUpdated(controllerContext, bindingContext);
    }
}

en la clase modelo:

[ModelBinder(typeof(MyItemModelBinder))]
public class MyItemModel : IValidatableObject
{
    //...
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top