Quale dovrebbe essere la struttura di file / directory di visualizzazione in ASP.NET MVC?

StackOverflow https://stackoverflow.com/questions/127886

  •  02-07-2019
  •  | 
  •  

Domanda

Sono confuso con come sono organizzate le viste, ed è importante capirlo poiché ASP.NET MVC usa le convenzioni per far funzionare tutto correttamente.

Nella directory delle viste ci sono sottodirectory. All'interno di queste sottodirectory ci sono viste. Suppongo che le sottodirectory si associno ai controller e che i controller agiscano sulle viste contenute nelle loro sottodirectory.

C'è un'aspettativa emergente su quali tipi di viste sono contenute in queste directory? Ad esempio, la pagina predefinita per ciascuna directory dovrebbe essere index.aspx? Le pagine dovrebbero seguire una convenzione di denominazione come Crea [controller] .aspx, Elenco [controller] .aspx, ecc? O non importa?

È stato utile?

Soluzione

Visualizza i nomi delle directory e i nomi dei file sono importanti, perché il framework ASP.NET MVC fa alcune ipotesi al riguardo. Se non si è conformi a questi presupposti, è necessario scrivere il codice per far sapere al framework cosa si sta facendo. In generale, dovresti conformarti a questi presupposti a meno che tu non abbia una buona ragione per non farlo.

Diamo un'occhiata all'azione del controller più semplice possibile:

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

Poiché non è stato specificato alcun nome di vista nella chiamata a View (), il framework presumerà che il nome della vista sarà lo stesso del nome dell'azione. Il framework ha un tipo chiamato ViewEngine che fornirà l'estensione. Il ViewEngine predefinito è WebFormViewEngine, che prenderà quel nome e vi aggiungerà un aspx. Quindi il nome file completo in questo caso sarebbe NotAuthorized.aspx.

Ma in quale cartella verrà trovato il file? Ancora una volta, ViewEngine fornisce tali informazioni. Con WebFormViewEngine, cercherà in due cartelle: ~ / Views / Shared e ~ / Views / {controller}

Quindi, se il tuo controller fosse chiamato AccountController, apparirebbe in ~ / Views / Account

Ma ci possono essere momenti in cui non vuoi seguire queste regole. Ad esempio, due azioni diverse potrebbero restituire la stessa vista (con un modello diverso o qualcosa del genere). In questo caso, se specifichi esplicitamente il nome della vista nella tua azione:

    public ActionResult NotAuthorized()
    {
        return View("Foo");
    }

Nota che con WebFormViewEngine, il " visualizza nome " è generalmente uguale al nome del file, meno l'estensione, ma il framework non richiede quello di altri motori di visualizzazione.

Allo stesso modo, potresti anche avere un motivo per volere che la tua applicazione cerchi viste e cartelle non predefinite. Puoi farlo creando il tuo ViewEngine. Mostro la tecnica in questo post sul blog , ma i nomi dei tipi sono diversi, poiché è stato scritto per una versione precedente del framework. L'idea di base è comunque la stessa.

Altri suggerimenti

Per quanto riguarda i nomi previsti per le viste, penso che sia una di quelle cose che ogni progetto o organizzazione proverà a standardizzare.

Come hai accennato alla tua domanda, è possibile che alcune di queste viste (o più precisamente, le azioni che le rendono) diventino popolari su tutta la linea, come ad esempio quelle di seguito che sono comuni nelle applicazioni RoR che adottano il Paradigma REST:

  • / ordini / (es. indice)
  • / ordini / mostra / 123
  • / ordini / modificare / 123
  • / ordini / aggiornamento / 123
  • / ordini / new
  • / ordini / creare
  • / ordini / distruggere / 123

La scelta / standardizzazione delle viste dipende in gran parte dal modo in cui modellate la vostra applicazione (per dire l'ovvio) e da quanto siete grossi. Più si avvicinano i controller alle singole classi di modelli (tosse ... risorse ... tosse), più brevi saranno le tue azioni e più facilmente sarai in grado di seguire una serie standard di azioni (come nell'esempio precedente ).

Credo anche che azioni più brevi aiutino a spingere sempre più la logica aziendale del modello nei modelli stessi, a cui appartiene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top