Revalidating a modified ViewModel within a controller method?

后端 未结 2 1388
耶瑟儿~
耶瑟儿~ 2020-12-08 06:17

EDIT - We\'re using MVC4 Dev Preview....

I\'m implementing an edit page for a FishingTrip class. FishingTrip contains a c

相关标签:
2条回答
  • 2020-12-08 06:37

    Once you have removed the offending item(s), clear the ModelState and validate again, like so:

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

    Note: Be carefull when use TryValidateModel method because this method does not validate nested object of model (As mentioned by @Merenzo).

    0 讨论(0)
  • 2020-12-08 06:50

    Late to the game, but still: I was also looking for a way to validate model after doing some tweaks to it (more precisely - to the items of its nested collection) - and TryValidateModel didn't work for me, as it doesn't process nested objects.

    Finally, I settled with custom model binder:

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

    on the model class:

    [ModelBinder(typeof(MyItemModelBinder))]
    public class MyItemModel : IValidatableObject
    {
        //...
    }
    
    0 讨论(0)
提交回复
热议问题