2010-11-01 12 views
6

Sto cercando di entrare in MVC e attualmente sto leggendo il libro MVC ASP.NET professionale wrox.Qualcuno potrebbe spiegarmi ASP.NET MVC?

I tipo di ottenere così lontano. Invece di ogni URL che va a una pagina va a un controller. L'azione del controller ottiene quindi i dati e decide quale vista utilizzare.

Capisco anche che se ho un URL del tipo/product.aspx? Id = 100, allora il controller otterrebbe i dettagli del prodotto e unirli con lo "spettacolo prodotto" vista.

Ora qui è la punta che non capisco ...

Se la mia pagina del prodotto ha altre cose su di esso, come una scatola di login, una sezione "top 10 prodotti", elenco di categorie, ecc, che possono o non essere usato anche su altre pagine, come posso includerli e mantenere separato il loro codice?

Nel modello classico aspx sarebbe semplice. Se i miei primi 10 prodotti apparissero su ogni pagina, lo inserirò in una pagina principale, ma più probabilmente diventerei un controllo utente se dovesse essere usato su alcune pagine e non su altre.

Da quanto ho capito di MVC finora, il controller dei miei prodotti avrebbe dovuto ottenere i primi 10 prodotti e così ogni altro controller che stava producendo una pagina con i primi 10 prodotti su di esso.

Confuso. Per favore aiuto.

+1

"se ho un url like/product.aspx? Id = 100" - non lo fai. :) – bzlm

+1

Metti in pausa la lettura e inizia la codifica, quindi capisci ... :) – Aristos

+0

bzlm, buon punto. prodotti/100 – jonhobbs

risposta

4

Da quello che ho capito di MVC finora, mio controller prodotti avrebbe dovuto ottenere i primi 10 prodotti e così sarebbe qualsiasi altro controller che era produrre una pagina con i primi 10 prodotti su di esso.

Non necessariamente. È possibile utilizzare le pagine master con MVC e Parziali per compartimentare i contenuti della vista riutilizzabili.

Questo è un buon articolo sull'utilizzo di partial. http://jeffreypalermo.com/blog/asp-net-mvc-and-the-templated-partial-view-death-to-ascx/

Inoltre, in 10 prodotti Top esempio, si potrebbe avere che reso da un'azione di bambino:

[ChildActionOnly] 
public ActionResult GetTopTenProducts() 
{ 
    var products = db.GetTopProducts(10); 
    return View(products); 
} 

si dovrebbe quindi avere una vista parziale (ascx) chiamato "GetTopProducts.ascx" che sarebbe visualizzato quando si chiama l'azione GetTopTenProducts(). Poi nella tua pagina master, o dovunque si voleva che Top 10 di presentarsi, si dovrebbe chiamare in questo modo:

<% Html.RenderAction("GetTopTenProducts") %> 
+0

Eccellente esempio. Grazie. – jonhobbs

+0

Ho avuto la stessa domanda quando ho iniziato ad imparare MVC :) – dotariel

+0

+1 - nessuna consegna nonsense :) –

2

Stai vicino.

Stai solo dimenticando che il controller è una classe che può ereditare da una classe di base.

È possibile creare una classe base del controllore che gestisce il recupero dei primi dieci prodotti, e quindi avere qualsiasi controller che hanno bisogno di tale funzionalità ereditano dalla classe base.

È quindi creare una pagina master che utilizza una vista parziale di rendere i primi dieci prodotti passati alla vista (dal controller di base).

... e voilà! Nessuna ripetizione del codice.

1

Si prega di non dimenticare che in ASP.NET MVC è ancora possibile utilizzare MasterPage. Con specifico per ASP.NET MVC 2 è possibile visualizzare questi 10 prodotti utilizzando RenderAction che può eseguire il rendering di un'azione da qualsiasi controller selezionato.

Oltre a ciò, è necessario conoscere anche PartialView.

+0

Grazie, Renderaction e PartialView sono ciò che stavo cercando. Dovrò fare più lettura. – jonhobbs

1

È possibile utilizzare le pagine master e nelle viste parziali MVC sono sinonimi dei controlli utente. La differenza della pagina master non ha un controller corrispondente. Tu risolvi in ​​due modi.

  1. Quando si utilizza una vista parziale si può passare un modello.

    <%= Html.RenderPartial("PartialView",Model) %> 
    
  2. si può solo fare il lavoro in vista parziale, utilizzando le staffe codice <% %>.
Problemi correlati