I'm wondering if there is a way to use the built in model binding similar to the internal model binding that occurs before a controller action.
My problem is that I want to be able to control the binding as I won't know the type of object to bind until I'm actually in the context of the controller action.
I understand I can inherit the DefaultModelBinder to perform custom binding, but I'm happy with what's already on offer, and just want to utilise it - take this ideal example to get an idea of what I'm after:
public ActionResult DoCustomBinding(string modelType)
{
... // logic to determine type to check and create strong 'actual' type
object model = BindModel(actualType);
... // do something with bound model
return View();
}
I've looked into using the DefaultModelProvider but unsure if this is the right way of going about this and I wasn't sure how to obtain the ModelBindingContext.
If anyone comes across this question from google as I did here is the answer: How to gain control over model binding?
In short: TryUpdateModel is the method you are looking for.
If you want to validate only specific parts of a model, this might be duplicate of an question I previously answered MVC Partial Model Updates.
The cool part about using System.ComponentModel.DataAnnotations.MetadataType is that the model binder will keep binding to a derived object of which is basically the same as the base object, just with different display/validation metadata.
Have you looking into the IModelBinder interface?
public class CustomModelsBinder : IModelBinder {
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { }
}
And then add this to your global.asax file:
protected override void OnApplicationStarted() {
ModelBinders.Binders.Add(typeof(CustomModels), new CustomModelsBinder());
}