In MVC dove metti i metodi di azione per le viste nella directory condivisa?

4

Ho creato un sito Web utilizzando un framework MVC.NET con C # che utilizza alcune viste condivise e viste parziali. Per visualizzare correttamente le viste c'è un po 'di codice che deve risiedere nel controller. Attualmente ho quella logica duplicata tra i controller.

Un esempio potrebbe essere una vista che accetta un id di errore e quindi estrae il record dal database e formatta la vista in modo diverso in base al tipo di errore. C'è una piccola quantità di lavoro che deve essere fatto per i dati nel controller prima che possa essere visualizzato.

Se la vista si trova nella directory condivisa dove dovrebbe andare il controller? Oppure, è meglio progettare per creare un nuovo controller solo per questo?

Sto cercando di scegliere un design che impedisca il "controller creep" che avevamo in un progetto precedente.

Aggiornamento: attualmente sto imparando su MVC usando Razor e ho imparato a conoscere il metodo di estensione HTML.Action. Se dovessi tornare indietro e riscrivere questo progetto, inserirò il metodo in un controller "Condiviso" e useremo HTML.Action per formattare i dati per visualizzarli su qualsiasi schermata di cui avessi bisogno.

    
posta Amy Patterson 25.04.2011 - 20:38
fonte

2 risposte

2

Prova a cambiare il tuo punto di vista quando pensi a questo problema. Una vista non ha un'azione. Un'azione restituisce un riferimento a una vista. Più azioni possono restituire riferimenti alla stessa vista, oppure le azioni potrebbero non restituire una risposta che non è correlata a una vista. Questa è la parte rilevante di un pattern MVC.

In MVC per ASP.NET, utilizzando il ViewEngine predefinito, se un'azione restituisce un riferimento a una vista (utilizzando return View("ViewName") ), il framework cerca prima in una cartella denominata dopo il Controller e quindi in una cartella denominata "Shared ", sia nella cartella View dell'applicazione.

Quindi la domanda "Se la vista si trova nella directory condivisa, dove dovrebbe andare il controller?" non ha davvero senso. Quello che dovresti considerare è che una vista viene inserita nella directory condivisa in modo che sia accessibile da più controller.

    
risposta data 25.04.2011 - 22:07
fonte
-1

Che mi dici di questo?

public ActionResult SomeAction ()
{
    return View ("~/Views/Shared/Error");
}

Dai un'occhiata a questa domanda:

Can Specifico un percorso personalizzato per "cercare le viste" in ASP.NET MVC?

    
risposta data 25.04.2011 - 21:19
fonte

Leggi altre domande sui tag