In the ASP.Net MVC 5 application I'm currently writing, one Material can have many names (MaterialNames). I have build a web interface to add, edit, and delete those names for the material on the Edit and Create pages of the material. To achieve this I have multiple text-inputs on those pages which are named Material.MaterialNames. Those can be added and deleted client-side with javascript to change the number of names. I do not need indices in the names of the inputs because the data the user should see and edit is just a flat list of strings.
These are the relevant parts of my models:
public class MaterialVM
{
public Material Material { get; set; }
// ...
}
public class Material
{
public int Id { get; set; }
public List<MaterialName> MaterialNames { get; set; }
// ...
}
public class MaterialName
{
public int Id { get; set; }
public string Name { get; set; }
public int MaterialId { get; set; }
}
Now all would work great if Material.MaterialNames would be of type List<string>. In my case the model binder can not create MaterialNames from the multiple string values passed as form data. I believe the default approach to fix this would be
Writing a custom model binder
Is it a good idea to do that like in this answer (= Override BindProperty and just change the behaviour for one PropertyType)? I would combine that with globally registering the binder for the type MaterialVM.
Do I miss a simpler option?
Isn't it possible to just offer the default binder a method to cast/convert/serialize/... a simple type to a complex type? Is my approach how to write a custom model binder correct? Are there any other options I'm missing which would make this more intuitive?

Namebelongs with whichIdandMaterialIdproperty otherwise, especially if you dynamically adding and deleting items even if you were to create a custom ModelBinder). You can only avoid the indexers if your property ispublic List<string> MaterialNames { get; set; }MaterialNames. That leads to the question: are the non-complex types the binder supports hard-coded? Does the binder use any kind of standard deserialization method so that I could add the conversion logic at that point?IDproperty and the only way that can be done is by providing indexers.