2014-12-16 20 views
9

Qual è lo scopo e quando è necessario utilizzare SurfaceController o RenderMvcController? Sembra che non ci sia davvero nulla che io possa fare con un SurfaceController che non posso fare con RenderMvcController. Ad esempio, sto pensando in modo specifico alla gestione dell'invio del modulo. Con RenderMvcController posso fare:Umbraco SurfaceController vs RenderMvcController

public class HomeController : RenderMvcController 
{ 
    private IUmbracoMapper _umbracoMapper; 

    public HomeController() 
    { 
     _umbracoMapper = new UmbracoMapper(); 
    } 

    [HttpGet] 
    public ActionResult Home() 
    { 
     HomeViewModel viewModel = new HomeViewModel(); 

     _umbracoMapper.Map(CurrentPage, viewModel); 

     return CurrentTemplate(viewModel); 
    } 

    [HttpPost] 
    public ActionResult Home(HomeViewModel viewModel) 
    { 
     // Handle form submission 
    } 
} 

Questo sembra più in linea con MVC per me, soprattutto perché posso usare pacchetti come UmbracoMapper per mappare il nodo Umbraco corrente a un modello di vista e passare che a mio modo di vedere? Perché e quando dovrei usare un SurfaceController?

Se fossi così inclinato, potrei usare RenderMvcController per dirottare ogni percorso per un dato nodo, dandomi più controllo sulla mia applciation, un po 'più come una pura app ASP.NET MVC. È una buona cosa?

risposta

6

Dalla documentazione ufficiale:

controllore in superficie

Un SurfaceController è un controller MVC che interagisce con il rendering front-end di un UmbracoPage. Possono essere utilizzati per il rendering del contenuto di azioni bambino , per la gestione di invii di dati modulo e per il rendering di macro di azioni per bambini. I controller di superficie sono instradati automaticamente , ovvero non è necessario aggiungere/creare percorsi personalizzati per questi controller .

Fonte: http://our.umbraco.org/documentation/Reference/Templating/Mvc/surface-controllers

controller personalizzati

Per impostazione predefinita, tutti del front end di routing viene eseguito attraverso l'Umbraco.Web.Mvc.RenderMvcController Indice azione che dovrebbe funzionare bene per la maggior parte delle persone. Tuttavia, in alcuni casi è possibile che le persone desiderino il completo controllo di su questa esecuzione e che la propria azione possa essere eseguita. Alcuni motivi potrebbero essere: per controllare esattamente come vengono visualizzati i rendering resi, la sicurezza personalizzata/granulare per determinate pagine/modelli o essere in grado di eseguire qualsiasi codice personalizzato nel controller che esegue il rendering del front-end . La buona notizia è che questo è completamente possibile. Questo processo riguarda la convenzione ed è davvero semplice!

Fonte: http://our.umbraco.org/documentation/Reference/Templating/Mvc/custom-controllers

fa questo aiuto? Hai ragione, penso che l'unica vera differenza con il controller Surface sia il routing automatico.

Simon

+0

Grazie per la risposta. Ho iniziato a pensarci dopo aver letto il post sul blog di Sebaastian Janssen su cultiv.nl riguardo al dirottamento del percorso (qual è questa rotta di Umbraco che dirotta tutto?). Mi chiedo perché dovresti usare un SurfaceController quando puoi ottenere gli stessi risultati in un approccio più puro (nell'accezione ASP.NET MVC). Forse non c'è una risposta tecnicamente corretta ed è una questione di preferenza ..? – Iain