View sta chiamando il metodo di costruzione nel modello invece di passare il modello al metodo controller

0

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.

    
posta Theomax 04.06.2013 - 18:30
fonte

1 risposta

0

Ho risolto questo problema creando un modello condiviso per AddUser e EditUser piuttosto che con due modelli separati con AddUserModel che eredita da EditUserModel. Quando si invia il modulo nella vista, viene sempre chiamato il costruttore predefinito / senza parametri e si tratta del comportamento previsto di MVC e non di un errore, come sospettavo inizialmente.

    
risposta data 05.06.2013 - 19:48
fonte

Leggi altre domande sui tag