2012-10-15 10 views
10

Mi sto solo occupando di Nancy, utilizzando la build corrente su Nuget, v0.12.1.0 e mi piacerebbe utilizzare il motore di visualizzazione Razor.Nancy.ViewEngines.Razor v0.12.1.0 supporta le viste Layout amd _ViewStart?

Il v0.12.1.0 del motore di visualizzazione Razor supporta il layout e _ViewStart?

ad es.

Ho il seguente in ~/Views/_ViewStart.cshtml

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

e di seguito nel ~/Views/Shared/_Layout.cshtml

@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic> 
<!DOCTYPE html> 
<html> 
<head> 
    @RenderSection("head", false) 
</head> 
<body> 
    @RenderBody() 
</body> 
</html> 

Ma tutto quello che sto ottenendo quando ho colpito la home page è il contenuto di una vista ho impostato in ~/Views/Home/Index.cshtml

<h1>Home</h1> 

Il mio modulo di casa sembra lik e questo:

public class Home : NancyModule 
{ 
    public Home() 
     : base("") 
    { 
     Get["/"] = _ => View["Index"]; 
    } 
} 

risposta

8

_ViewStart non è qualcosa che (attualmente) il sostegno, ma Layout è sicuramente supportato su una base per-view

+8

_ViewStart è ora supportato – TheCodeJunkie

+0

Hallelujah: D: D – nathanchere

2

Da quello che posso dire, la risposta semplice sarebbe no.

Una risposta più dettagliata, dalla ricerca limitata che ho fatto.

In MVC 2, Microsoft ha aggiunto una dll System.Web.Razor che conteneva il parser Razor e il generatore di codice. La funzione _ViewStart è stata aggiunta in MVC 3 e in quella versione, Microsoft non ha creato una nuova dll System.Web.Razor. Piuttosto hanno incorporato il nuovo parser e il generatore di codice nella nuova dll System.Web.Mvc sotto lo spazio dei nomi System.Web.Mvc.Razor. Non sono sicuro delle ragioni alla base di questo cambiamento, forse per semplificare l'implementazione.

Il viewer di Nancy Razor fa riferimento al parser e al generatore di codice del rasoio originali e quindi non sarà in grado di accedere a nessuna delle nuove funzionalità di Razor in MVC 3. Non ho avuto discussioni con i ragazzi di NancyFx e non ho avuto Vedi (dopo una rapida ricerca) eventuali problemi su GitHub o discussioni nel gruppo google, quindi non so se stanno progettando di cambiare il viewengine o meno.

29

Come di Nancy v0.20 file _ViewStart è ora supportato.

Come suggerimento, quando si fa riferimento al file di layout, non aggiungere il prefisso alla posizione con ~/. Basta avere quanto segue o otterrete eccezioni di riferimento null.

@{ 
    Layout = "Views/Shared/_Layout.cshtml"; 
} 
+0

questo è l'uomo pulito – misaxi

+0

questo non sembra funzionare quando si utilizza viste come risorse incorporate – Maciek

+1

Speriamo che sto semplicemente non vederlo, ma questo in realtà dovrebbe essere nella documentazione per Nancy! Ho lottato con questo per un paio d'ore senza un indizio sul motivo per cui i miei percorsi di layout non funzionavano quando il mio sito è stato distribuito. –

2

Volevo aggiungere alla risposta perché ho perso circa un giorno cercando di capire questo :.

Nancy.RequestExecutionException: Oh noes! ---> System.NullReferenceException: Object reference not set to an instance of an object. 
    at Nancy.ViewEngines.DefaultViewCache.GetOrAdd[TCompiledView](ViewLocationResult viewLocationResult, Func`2 valueFactory) 
    at Nancy.ViewEngines.Razor.RazorViewEngine.GetOrCompileView(ViewLocationResult viewLocationResult, IRenderContext renderContext, Assembly referencingAssembly, Type passedModelType) 
    at System.Dynamic.UpdateDelegates.UpdateAndExecute5[T0,T1,T2,T3,T4,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4) 
    at CallSite.Target(Closure , CallSite , RazorViewEngine , ViewLocationResult , IRenderContext , Assembly , Object) 
    at Nancy.ViewEngines.Razor.RazorViewEngine.GetViewInstance(ViewLocationResult viewLocationResult, IRenderContext renderContext, Assembly referencingAssembly, Object model) 
    at System.Dynamic.UpdateDelegates.UpdateAndExecute5[T0,T1,T2,T3,T4,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4) 
    at Nancy.ViewEngines.Razor.RazorViewEngine.<>c__DisplayClass27.b__26(Stream stream) 
    at Nancy.Responses.MaterialisingResponse.PreExecute(NancyContext context) 

Simile alla risposta di Richard Banks - Nancy non risolve il percorso layout di default nel file Vista/_ViewStart.cshtml (vale a dire: ~/Vista/Shared/_Layout.cshtml). ~/Non è interpretato nel resolver di visualizzazione in Nancy.

È possibile rimuovere ~/part o commentare il layout predefinito e specificare manualmente un layout su ciascuna vista. Il motivo per cui ho fatto il secondo è perché Nancy esegue ancora il _Layout.cshtml anche se hai annullato il layout nella tua vista.

Problemi correlati