I've created a custom MVC Model Binder which gets called for every HttpPost
that comes into the server. But does not get called for HttpGet
requests.
- Should my custom model binder get called during a
GET
? If so, what did I miss? - If not, How can I write custom code handling the
QueryString
from aGET
Request?
Here's my implementation...
public class CustomModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
// This only gets called for POST requests. But I need this code for GET requests.
}
}
Global.asax
protected void Application_Start()
{
ModelBinders.Binders.DefaultBinder = new CustomModelBinder();
//...
}
I've looked into these solutions, but they don't quite work for what I'm looking for:
- Persisting complex types via
TempData
- Using the default binder to build up complex types (
?Name=John&Surname=Doe
)
Remark on answer
Thanks to @Felipe for the help. Just in case someone struggles with the same, I learnt:
- The custom model binder CAN be used for
GET
requests - You CAN use
DefaultModelBinder
class - My snag was that the action method MUST have a parameter (otherwise the model binder is skipped for
GET
Requests, which makes sense when you think about it)
Let's supose you have your own type you want to bind.
You can create a custom model bind for this specific type, inherithing from
DefaultModelBinder
, for sample:In the Global.asax in the
Application_Start
event, you can registry this model bind, for sample:In the
BindModel
method from thePersonModelBinder
, make sure you have all parameters in the querystring and give them the ideal treatment.Since you have this action method:
You can access this action with an url something like this: