2015-09-19 6 views
5

Con Asp .Net 5 beta 6 gli helper dei tag non vengono risolti quando la vista si trova all'esterno della cartella Views. La struttura delle cartelle che vorrei è basata sulla funzione piuttosto che sui tipi di file. Il controller, visualizza modelli e viste per una particolare funzione Vorrei raggrupparli in una cartella che rifletta il nome del controller. Ecco un esempio della struttura delle cartelle che vorrei nel progetto:Gli helper dei tag non vengono risolti quando la vista è all'esterno della cartella Views

UI 
    - Account 
     - AccountController.cs 
     - AccountViewModels.cs 
     - Login.cshtml 
     - Register.cshtml 
    - Students 
     - StudentsController.cs 
     - StudentsViewModels.cs 
     - CaptureStudent.cshtml 

per raggiungere questo ho creato un motore di visualizzazione personalizzata:

public class CustomUIViewEngine : RazorViewEngine 
{ 
    public CustomUIViewEngine(IRazorPageFactory pageFactory, 
     IRazorViewFactory viewFactory, 
     IOptions<RazorViewEngineOptions> optionsAccessor, 
     IViewLocationCache viewLocationCache) : 
     base(pageFactory, viewFactory, optionsAccessor, viewLocationCache) 
    { 
    } 
    public override IEnumerable<string> ViewLocationFormats 
    { 
     get 
     { 
      var viewLocationFormats = base.ViewLocationFormats 
      .Union(new string[] { "~/UI/{1}/{0}.cshtml" }); 
      return viewLocationFormats; 
     } 
    } 
} 

Che mi iscrivo in startup.cs come segue:

motore di visualizzazione
services.AddMvc().ConfigureMvcViews(options => 
     { 
      options.ViewEngines.Clear(); 
      options.ViewEngines.Add(typeof(CustomUIViewEngine)); 
     }); 

Questa usanza funziona e lo sguardo si trova e resa, con l'unico problema è che la tag helpers non sono rendere correttamente d, così invece di vedere questo:

<form method="post" class="form-horizontal" role="form" action="/Account/Login"> 

sto vedendo questo nella fonte reso:

<form asp-controller="Account" asp-action="Login" method="post" class="form-horizontal" role="form"> 

Qualcuno sa il motivo per cui il tag helpers non sono il rendering correttamente quando la vista si trova al di fuori della cartella Visualizzazioni e se c'è un modo per correggere questo in un'applicazione web Asp.Net 5?

risposta

2

Stai aggiungendo il vostro di TH nelle _ViewImports di file, e in tal caso sono la utilizzando affermazioni di essere riconosciuto? Hai provato ad aggiungere @addTagHelper direttamente a una vista?

Alcuni di questi sono menzionati nel mio Authoring Tag Helpers Vado al dettaglio sulla gerarchia dell'ereditarietà, aggiungendo, rimuovendo in un prossimo articolo.

+1

Grazie per l'aiuto RickAnd. :) Sì, l'aggiunta della direttiva @addTagHelper alla vista risolveva il problema, così come lo spostava la cartella _ViewImports dalla sua posizione predefinita alla radice della mia cartella UI. Problema risolto. Grazie! – BruceHill

+0

@BruceHill fantastico. Ti dispiacerebbe contrassegnare questo come la domanda risposta? – RickAndMSFT

+1

Sarebbe utile se i documenti potessero includere ulteriori informazioni riguardo alle posizioni dei file possibili di "_ViewImports" se non si utilizza la struttura di progetto predefinita (ad esempio, cosa succede se tutte le viste non si trovano in una cartella 'Viste' comune?). Sembra che se si posiziona '_ViewImports' nella radice del progetto, esso si applicherà a tutte le viste in tutte le cartelle, quindi questo lo gestisce, ma al momento i documenti non sembrano coprirlo. – cbranch