2009-08-20 15 views
8

Una delle nuove funzionalità di ASP.NET MVC 2 Anteprima 1 è il supporto per il concetto di modelli di editor e modelli di visualizzazione che consentono di predefinire come un dato oggetto sarà reso per la visualizzazione o la modifica con una semplice aiutante HTML:ASP.NET MVC 2 - Quando utilizzare i modelli rispetto a quando utilizzare le viste parziali

<%=Html.EditorFor(customer => customer) %> 
<%=Html.DisplayFor(customer => customer) %> 

questo è piuttosto fresco, ma io non vedo la differenza tra questo e una vista parziale che serve allo stesso scopo . Inoltre, negli esempi ho visto che i Template Editor non contengono i tag del modulo e, nel caso in cui avessi bisogno di fornire alcune funzionalità lato client a un determinato editor (ad esempio attraverso jQuery), non riesco a posizionarlo in modo sicuro il modello perché non avrò un handle statico sul modulo a cui aggiungo la logica nel client. Nell'applicazione a cui sto lavorando ho una combinazione di modelli di editor e viste parziali che eseguo il rendering per modificare il contenuto. A seconda della complessità del modulo sto creando un editor perché ho scelto un approccio rispetto all'altro, ma questo naturalmente aggiunge un livello indesiderato di incoerenza all'applicazione.

Perché utilizzare un modello su una vista parziale o viceversa? Inoltre, quando si utilizza un modello di editor, qual è il modo ideale per aggiungere la logica lato client all'editor senza copiarlo in ogni vista che utilizza quell'editor?

risposta

3

ScottGu ne spiega alcune nel suo blogpost about MVC V2.

Da ciò che ho raccolto questo creerà input per ciascuna delle proprietà dell'oggetto che si passa all'helper. Quindi, se avete l'oggetto:

public class Customer 
{ 
    public string Name { get; set; } 
    [UIHint("MyCoolCalendar")] 
    public DateTime CoolDate { get; set; } 
} 

e quindi creare un editor:

<%= Html.EditorFor(customer => customer) %> 

produrrà un input di testo per il nome del cliente, ed una MyCoolCalendar (che è un controllo customdefined) per CoolDate senza dover scrivere un controllo personalizzato per avvolgere l'intero oggetto. Si deduce automaticamente il tipo di controllo dal tipo/uihint della proprietà. Almeno questo è come l'ho capito senza avere il tempo di provarlo ancora.

+0

Ho letto il post di Mr. Gu e spiega che l'EditorFor può essere utilizzato sia per i singoli campi e gli oggetti interi. Mi riferisco a quest'ultimo caso nel mio scenario sopra. –

+0

Oh okay. Dichiara anche lo scopo di questo nel post: "Per impostazione predefinita eseguirà un loop sulle proprietà pubbliche dell'oggetto e genererà un elemento

+0

Quindi dire che non ho bisogno di definire esplicitamente un modello quando chiamo EditorFor (SomeObject) finché non ho bisogno di fare qualcosa di speciale come gestire i campi personalizzati? –

0

Ecco un esempio che ho trovato che funziona bene.

Diciamo che avete un cliente che ha un indirizzo. Non è possibile creare un indirizzo per un NUOVO cliente, ma tramite Associazione, si potrebbe avere un oggetto Cliente che ha un campo Indirizzo.

Quindi, nel metodo "Crea" per il cliente si invoca Html.EditorFor(c => c.Address); (ed è possibile creare un modello personalizzato per le proprie esigenze qui) che produrrà oggetto Indirizzo completamente popolato, che è possibile salvare prima del Cliente, risolvendo così la dipendenza.

Ora, quando si dispone di dati di riferimento, come Elenco paesi o Stati, o qualsiasi altra cosa, forse è meglio usare solo Vista parziale per renderlo e non preoccuparsi di Associazione.

Spero che questo aiuti,

-vlad

Problemi correlati