Foi útil?

Solução

Depois de remover o (s) item (ns) ofensivo (s), limpe o ModelState e valide novamente, da seguinte maneira:

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

Nota : Tenha cuidado ao usar o método TryValidateModel porque este método não valida o objeto aninhado do modelo (conforme mencionado por @Merenzo).

Outras dicas

Atrasado para o jogo, mas ainda: Eu também estava procurando uma maneira de validar o modelo depois de fazer alguns ajustes nele (mais precisamente - nos itens de sua coleção aninhada) - e TryValidateModel não funcionou para mim, pois nãoprocessar objetos aninhados.

Finalmente, resolvi usar o fichário de modelo personalizado:

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

na classe do modelo:

[ModelBinder(typeof(MyItemModelBinder))]
public class MyItemModel : IValidatableObject
{
    //...
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top