I've learned about custom editor templates for ASP.NET MVC3 and I see now how I can easily implement my own. However for an editor to work it must not only display that data in a textbox, but also somehow transfer the user-edited contents to the server for processing. So how does this binding work for complex models? How does MVC decide where each POST value goes? Are there some magic naming conventions? What about very complex models like dynamic lists or dictionaries or DataTable
s?
Asked
Active
Viewed 2,426 times
2
1 Answers
3
There is a naming convention. So for example if you have the following model:
public class Foo
{
public Bar Bar { get; set; }
}
public class Bar
{
public string Baz { get; set; }
}
and the following action:
public ActionResult Index(Foo foo) { ... }
you could send the following request:
/home/index?Bar.Baz=somevalue
in order to set the Baz value. Of course this will automatically instantiate the Foo model and its Bar property. And obviously this convention also extends for lists and dictionaries.
Whether the values are sent in the query string (GET request), as form values (POST request) or as route values it doesn't really matter for the default model binder. It will look at all those places.
And you should never forget that if this default naming convention doesn't suit your particular requirements you should feel free to write a custom model binder.
Remark: there is also the case for uploading files.

Darin Dimitrov
- 1,023,142
- 271
- 3,287
- 2,928