The model system in MVC has several extensible pieces, including the ability to describe models with metadata, to validate models, and to influence how models are constructed from the request data. We have a sample for each of these extensibility points within the system.
Turning Request Data into Models
The process of turning request data (such as form data, query string data, or even routing information) into models is called model binding. Model binding really happens in two phases:
- Understanding where data comes from (through the use of value providers)
- Creating/updating model objects with those values (through the use of model binders).
Exposing Request Data with Value Providers
When your MVC application participates in model binding, the values that are used for the actual model binding process come from value providers. The purpose of a value provider is simply to provide access to information that is eligible to be used in model binding. The MVC framework ships with several value providers which can provide data from the following sources:
- Explicit values for child actions (RenderAction)
- Form values
- JSON data from XMLHttpRequest
- Route values
- Query string values
- Uploaded files
Value providers come from value provider factories, and the system searches for data from those value providers in their registered order (the preceding list is the order that is used by default, top first to bottom last). Developers can write their own value provider factories ...