2009-11-04 15 views
9

Attualmente sto utilizzando asp.NET MVC per creare parti del sistema di gestione dei contenuti di un sito Web e ho l'odioso lavoro di ricreare tutte le mie viste come viste parziali come sembra che infranga il modo in cui funziona la mappa del sito.Un controller MVC e una vista devono avere una relazione 1 a 1?

Ad esempio, il mio FAQAdminController ha le viste: Index, AddFAQ, EditFAQ, ConfirmDeleteFAQ e queste devono diventare viste parziali.

Mi è stato detto che ogni controller dovrebbe avere una singola vista e tutte le altre forme o azioni che terminano nel contenuto della pagina da visualizzare dovrebbero essere implementate come viste parziali.

Ho controllato prima di postare e nessuna documentazione, articoli, wiki o domande SO mi fornisce una risposta diretta in merito alla possibilità o meno di avere più viste per controller sta infrangendo il modello MVC.

Strettamente, un controller MVC e una vista devono avere una relazione 1 a 1?

risposta

16

Mi è stato detto che ogni controller dovrebbe avere una singola vista e tutte le altre forme o azioni che terminano nel contenuto della pagina da visualizzare dovrebbero essere implementate come viste parziali.

Non ha senso.

In modo rigoroso, un controller MVC e una vista hanno una relazione 1 a 1?

Assolutamente no. Progetta la tua applicazione in modo logico e coerente.

Un controller di solito gestisce molte azioni e restituisce molte visualizzazioni diverse. Potresti considerare di avere un FAQController per rendere tutte le viste, sia per gli utenti che per gli amministratori.

8

Penso che sconfigga lo scopo di MVC. Come controller dovrebbe essere in grado di decidere quale vista utilizzare per presentare il modello.

2

Il controller MVC dovrebbe essere in grado di supportare più di una vista.

1

I controller MVC possono e devono supportare più visualizzazioni. È utile che le viste supportate da un singolo controller si riferiscano allo stesso oggetto o processo stesso.

Si consideri l'esempio di seguito

public class ExampleController : Controller 
{ 
    public ActionResult Index() 
    { 
      //get list of objects 
      return View(); // uses a view called Index 
    } 

    public ActionResult Edit(string id) 
    { 
      Object target = ObjectManager.GetObject(id); 
      if (target == null) 
      { 
        return New();//view for creating a record 
      } 
      else 
      { 
        ViewData.Add("detail", target); 
        return View("Detail");//using a view not name-mapped to controller method name 
      } 
    } 

    public ActionResult New() 
    { 
      return View(); 
    } 

} 
Problemi correlati