Domanda

Ho voglia di un elenco di diversi (derivato) tipi di oggetto di lavoro di Default con il Modelbinder in Asp.net MVC 2.

Ho il seguente ViewModel:

public class ItemFormModel
    {       
        [Required(ErrorMessage = "Required Field")] 
        public string Name { get; set; }
        public string Description { get; set; }

        [ScaffoldColumn(true)]
        //public List<Core.Object> Objects { get; set; }       
        public ArrayList Objects { get; set; }                  
    }

E l'elenco contiene oggetti di diversa tipi derivati, ad es.

public class TextObject : Core.Object
    {
        public string Text { get; set; }
    }

    public class BoolObject : Core.Object
    {
        public bool Value { get; set; }
    }

Non importa se io uso la Lista o l'ArrayList di attuazione, tutto ciò che si è ben messo in forma, ma il modelbinder non risolve l'oggetto derivato proprietà del tipo per me quando postare al ActionResult.

Che cosa potrebbe essere una buona soluzione per il Viewmodel struttura per ottenere un elenco di diversi tipi di oggetti gestiti?Avere un elenco aggiuntivo per ogni tipo di oggetto (ad es.Elenco, Elenco, ecc.) non sembra essere una buona soluzione per me, perché questo è un sacco di overhead sia nella costruzione del viewmodel e la mappatura di nuovo per il modello di dominio.

Pensando l'altro approccio di associazione di tutte le proprietà in un raccoglitore di modello personalizzato, come faccio ad usare le annotazioni di dati approccio qui (convalida attributi richiesti, etc.) senza un sacco di overhead?

È stato utile?

Soluzione

Controllare il Tipo derivato ModelBinder in MvcContrib.Questo consente di modelbind di tipi derivati attraverso il processo di 'typestamping' - che viene gestita automaticamente per voi quando si utilizza il RenderTypedPartial(...) di supporto.MvcContrib parziali mantenere stato di legame attraverso parziali in modo che il Nome/Id prefissi sono adeguatamente mantenuto su una profonda oggetto grafico.Se si utilizzano altri meccanismi come modelli, quindi, è necessario per gestire il typestamping te.Questo è spiegato nella pagina di documentazione.

Tornando alle tue domande e di come i tipi derivati si sono risolti con la ModelBinder, è possibile registrare il tipo derivato variazioni con gli attributi in un meccanismo simile a WCF KnownTypeAttribute o si può fare la registrazione all'avvio.In ogni modo, queste variazioni sono registrati una sola volta e tenuto su per le considerazioni sulle prestazioni.

Il raccoglitore di modello risolve anche questo problema in modo tale da non interferire con i dati di annotazione/attributi di convalida.Essi funzionano come ci si aspetta in qualsiasi altro scenario.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top