2010-12-29 15 views
20

Nella mia app ho bisogno di caricare la stessa vista da due diversi controller senza posizionare la vista nella directory delle viste condivise.Asp.net MVC - Posso caricare una vista da una cartella di visualizzazione diversa?

Fondamentalmente ho questa struttura di cartelle

  • Controller
    • EventsController.cs
    • SearchController.cs
  • Visite
    • Eventi
        .210
      • Preview.aspx
    • Ricerca

fondamentalmente Picture It molto simile a quello qui in caso di overflow dello stack. Si ottiene un'anteprima di un gruppo di domande sotto il collegamento alle domande, ma si ottiene anche una pagina formattata in modo identico quando si esegue una ricerca nella barra di ricerca. Le viste e i modellini visivi sono presumibilmente identici.

Poiché la vista che mi serve per la ricerca è esattamente la stessa della vista di cui ho bisogno per gli eventi, mi piacerebbe riutilizzare la stessa vista. Vorrei comunque evitare di utilizzare la directory condivisa per questa vista specifica.

Quindi la mia domanda a due parte è ---

  1. questo è possibile, e se sì, come?
  2. Questa cattiva pratica?

risposta

33

Sì, è possibile. Semplicemente return View("~/Views/Events/Preview.aspx").

Tuttavia, vorrei sconsigliarlo per una serie di motivi. Il più grande è che questo non sarà ovvio per chiunque cerchi di modificare il codice in un secondo momento (forse anche tu) e potrebbe portare a potenziali errori.

Un approccio migliore potrebbe essere quello di creare una vista "condivisa" o una vista parziale condivisa. La mia preferenza sarebbe una vista parziale condivisa, quindi nella tua vista non condivisa renderà la funzionalità di visualizzazione parziale desiderata.

+0

Se seguo questo approccio, sarà che ho delle viste identiche nella cartella Eventi e nella cartella Cerca, che non è un interruttore automatico, solo cercando di tenerlo ASCIUTTO. Non ho bisogno di una vista parziale che renda tutto nella vista, sarebbe semplicemente strano. –

+0

Ma stai davvero rendendo tutto nella vista? Se non altro, il titolo non sarebbe diverso? Suggerirei anche che se è veramente la stessa pagina, perché non usare semplicemente un'azione figlio per chiamare l'altra pagina? –

+0

Hai ragione, potrei benissimo chiamarlo "Eventi/Ricerca" e tenerlo nello stesso controller. Perché sì è tutto molto identico. Il titolo è dinamico, come lo è con tutte le mie viste, ed è generato nel ViewModel. –

1
  1. È possibile.
  2. Non sono sicuro che si stiano utilizzando viste con caratteri forti. Ma supponiamo di sì, allora è un po 'strano per me che tu abbia Ricerca evento & Cerca con lo stesso modello di vista. Forse separarli con due diversi modelli di vista e la vista sarebbe meglio IMHO. Inoltre, se si specifica il nome della vista da caricare nel controller, è in qualche modo considerato la vista di accoppiamento e il controller e certamente non è una buona idea.
+0

La funzione di ricerca SOLO cerca gli eventi, quindi i risultati sono formattati esattamente come gli eventi. Il modello di visualizzazione è esattamente lo stesso, e l'unica differenza "sottile" è che il controller di ricerca ha un parametro 'q' (per query). –

+0

forse dovresti astrarre il display in un controllo e poi riutilizzarlo. – Femaref

Problemi correlati