2010-04-02 13 views
5

Ho appena terminato il mio primo CMS ASP.NET MVC (2). Il passo successivo è creare un sito Web che mostri i dati dal database di CMS. Si tratta di progettazione di siti web:asp.net mvc2 - controller per pagina principale e organizzazione codice

http://img56.imageshack.us/img56/4676/portal.gif http://img56.imageshack.us/img56/4676/portal.gif


# 1 (scatola rossa) - Categorie di visualizzazione articolo. ViewModel:

public class CategoriesDisplay 
    { 
     public CategoriesDisplay() { } 

     public int CategoryID { set; get; } 
     public string CategoryTitle { set; get; } 
    } 

# 2 (scatola Brown) - display ultimi articoli x; salta quelli dalla casella verde n. 3. ViewModel:

public class ArticleDisplay 
    { 
     public ArticleDisplay() { } 

     public int CategoryID { set; get; } 
     public string CategoryTitle { set; get; } 

     public int ArticleID { set; get; } 

     public string ArticleTitle { set; get; } 
     public string URLArticleTitle { set; get; } 
     public DateTime ArticleDate; 

     public string ArticleContent { set; get; } 

    } 

# 3 (scatola verde) - Visualizza ultimi x articoli. Utilizza lo stesso ViewModel come scatola marrone # 2

# 4 (scatola blu) - Visualizza l'elenco degli eventi in programma. Utilizza dataContext.Model.Event come ViewModel

I riquadri n. 1, n. 2 e n. 4 si ripeteranno su tutto il sito e fanno parte della pagina mastro. Quindi, la mia domanda è: qual è il modo migliore per trasferire questi dati da Model a Controller e infine a View pages?

  1. Devo fare un controllo per la pagina di master e di classe ViewModel che vi avvolgerà tutti questi classi insieme O
  2. Devo creare parziali Visualizzazioni per ogni di queste scatole e rendere ogni di loro ereditare appropriata classe (se è anche possibile che funziona in questo modo?) O
  3. Devo inserire questo codice ripetuto in tutti i controller e tutte le ulteriori trasferimento di dati tramite Viewdata, che sarebbe probabilmente il wor se way :) OR
  4. C'è forse un modo migliore e più semplice ma non lo so/lo vedo?


Grazie in anticipo, Ile



EDIT:
Se la vostra risposta è # 1, quindi si prega di spiegare come fare un controller per pagina master!

EDIT 2:
In questa esercitazione viene descritto come passare i dati alla pagina master utilizzando classe astratta: http://www.asp.net/LEARN/mvc/tutorial-13-cs.aspx
In "Elenco 5 - Controllori \ MoviesController.cs", i dati vengono recuperati direttamente dal database utilizzando LINQ, non dal repository. Quindi, mi chiedo se questo è solo in questo tutorial, o qui c'è qualche trucco e il repository non può/non deve essere usato?

+0

È possibile creare una pagina principale fortemente tipizzata in MVC? –

+0

Vorrei anche sapere rispondere a questa domanda –

+0

la risposta per il passaggio dei dati alla Pagina Master è qui: http://www.asp.net/LEARN/mvc/tutorial-13-cs.aspx –

risposta

4

per ottenere i dati alla mia pagina master:

  • non mi piace utilizzare una classe astratta per ottenere i dati alla pagina master. Preferisco la composizione sull'eredità.
  • Non mi piace utilizzare il dizionario ViewData perché non è fortemente digitato.

Vorrei creare viste, ViewModels e azioni per ogni sezione. Quindi chiamare Html.RenderAction(...) Ad esempio:

Vorrei creare CategoriesDisplay.aspx con il solo html per la redbox. Vorrei che fosse il tuo modello CategoriesDisplay. Poi, nel mio controller:

public class CategoryController : Controller 
{ 
    public ActionResult DisplayCategories() 
    { 
     var model = new CategoriesDisplay(); 
     ... 
     return View(model); 
    } 
} 

poi nella mia pagina master:

<% Html.RenderAction<CategoryController>(c => c.DisplayCategoreis()); %> 

Questo renderà la linea vista CategoriesDisplay all'interno della pagina master. Che a sua volta consente di avere SOC (Seperation of Concerns), codice pulito e gestibile.

+0

Probabilmente dovrei aggiungere, l'estensione Html.RenderAction che ho usato fa parte del Assemblea Fut. MVC Asp.Net. http://aspnet.codeplex.com/releases/view/41742 – mxmissile

+0

Vedo ... non sapevo cosa fosse questo Html.RenderAction quindi ero un po 'scettico. Questo sicuramente sembra una soluzione più interessante di quella con la classe astratta. Lo proverò tra un giorno o due e vedrò se funziona davvero tutto per me :) Grazie maxmissile! –

+0

È possibile fare un'azione di un controllore e usarlo in diverse viste? Per essere più precisi, è possibile definire all'interno di Html.RenderAction() quale controller, quale azione e quale vista usare? –

2

Ho combattuto anche con questo.Inizialmente ho fatto un sacco di dumping di dati extra nel ViewData, che ha finito per dover essere restituito (fatto alcune estensioni che lo hanno facilitato, ma non ancora grandioso).

Vorrei andare con la scelta numero 1 e creare un ViewModel che avvolge tutte le classi di cui avresti bisogno.

+0

Modifica la mia domanda ... Ho dimenticato di aggiungere che non ho idea di come creare un controller per la pagina principale (sono asp.net newbie) –

Problemi correlati