Il problema è la proprietà UserTypes (utilizzata per popolare un elenco a discesa nella vista AddUser) non viene mantenuta dopo il POSTback del modulo.
Ecco il mio AddUserModel: (che eredita da EditUserModel che non ha proprietà per UserTypes / UserTypesSelectList - probabilmente parte del problema?)
public class AddUserModel : EditUserModel
{
public AddUserModel() : this(new Dictionary<string, string>())
{
}
public AddUserModel(Dictionary<string,string> userTypes)
{
UserTypes= userTypes;
}
//properties etc
public Dictionary<string, string> UserTypes{ get; private set; }
public SelectList UserTypesList
{
get { return new SelectList(UserTypes, "key", "value"); }
}
}
La vista ha il seguente ma chiama prima il costruttore senza parametri nel codice precedente invece del metodo AddUser () nel controller:
using (Html.BeginForm<MyController>(c => c.AddUser(Model)
Riesco a vedere quando si esegue il debug di questo perché il metodo del costruttore senza parametri in AddUserModel viene chiamato per primo anziché il metodo del controller che viene chiamato (creando in tal modo un AddUserModel vuoto). Ho trovato questa domanda su questo sito ma ancora non capisco.
Il debug mostra che dopo il POSTback del modulo AddUserModel non contiene dati, ma EditUserModel contiene i dati (eccetto i dati UserTypes perché non ha una proprietà per quello)
I modelli Aggiungi e Modifica devono avere le stesse proprietà? i UserTypes e UserTypesSelectList? C'è qualcosa che mi manca in termini di come i Modelli si ereditano gli uni dagli altri e si riferiscono a Views?
Modifica
Dopo un po 'di ricerca e decidendo di utilizzare un modello condiviso, sono riuscito a correggere quanto sopra. Si prega di fare riferimento alla mia risposta per maggiori dettagli.