2014-11-11 10 views
12

Sto provando a configurare RazorEngine in modo che intellisense funzioni sulle viste. Aggiungo RazorEngine e Microsoft.AspNet.Mvc utilizzando nuget. Creo TestView.cshtml e dichiaro @model MyModel ma si dice The name 'model' does not exist in the current context. Inoltre non posso usare intellisense all'interno della vista.Come rendere intellisense compatibile con RazorEngine?

Mi manca qualche passaggio qui? Come abilitare l'intellisense nella vista?

+0

Puoi fare un esempio (ho il sospetto che dovresti usare 'Modello', non' modello') –

+0

stai per caso estendendolo tramite una libreria di classi? solo curioso. – lemunk

+0

Questa è in realtà la sintassi corretta per la dichiarazione del modello.In seguito si riferisce a @Model. Quale versione di MVC? – markpsmith

risposta

26

È possibile utilizzare

@using RazorEngine.Templating 
@using Namespace.Of.My.Model 
@inherits TemplateBase<MyModel> 

sulla parte superiore del modello.

Questo funziona perfettamente su una nuova applicazione console con Visual Studio 2013 (dopo aver aggiunto un riferimento a RazorEngine). La documentazione per questo è here.

EDIT:

ho notato che questo funziona solo quando si aggiunge il progetto RazorEngine alla soluzione e direttamente riferimento. Se si utilizza il pacchetto di NuGet avete inoltre necessario garantire una delle seguenti opzioni per farlo funzionare:

  1. tuo percorso di output del progetto è impostato su bin\ invece di bin\Debug\ e bin\Release\.
  2. Copia RazorEngine.dll e System.Web.Razor.dll a bin\
+5

Ma ho bisogno di usare @inherits RazorEngine.Templating .TemplateBase. La prima istruzione using non funziona per me. – Dummy

4

Oh, ho affrontato con tale problema, mentre l'aggiunta del rasoio Engine per il mio progetto DLL personalizzata. Per risolvere questo problema è necessario:

1.correctly namespace di configurazione nel file di configurazione web (spero lo avete nella cartella di vista, se non - copiare da progetto MVC):

<system.web.webPages.razor> 
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
<pages pageBaseType="System.Web.Mvc.WebViewPage"> 
    <namespaces> 
    <add namespace="System.Web.Mvc" /> 
    <add namespace="System.Web.Mvc.Ajax" /> 
    <add namespace="System.Web.Mvc.Html" /> 
    <add namespace="System.Web.Routing" />  
    <add namespace="System.Web.Optimization" /> 
    </namespaces> 
</pages> 
</system.web.webPages.razor> 
... 

2.Use per costruire in bin\ percorso (non qualsiasi altro comando, è possibile utilizzare la copia di post-generazione per spostare i risultati in un altro luogo)

soluzione 3.Clean e rimuovere obj e bin cartelle, che costruire

codice mio punto di vista inizia fr om e tutto funziona bene

2

So che questa domanda è un po 'vecchia. Non ho potuto ottenere nulla per funzionare, non importa la soluzione. Ho una correzione di hacking che può essere gradita ad alcuni. Non mi piace molto, ma è la cosa più utile che ho ottenuto finora.

Il trucco è definire il "Modello" come variabile dal modello attuale. L'ho definito come "TrueModel", ma qualunque nome tu possa pensare che non entri in collisione con "model" o "Model" dovrebbe funzionare. Quindi sostituisci tutte le tue istanze di "Modello" con "TrueModel".

@using Namespace.To.My.Models 
@* This line should still look like an error, 
    but we only really care about the intellisense in the rest of the .cshtml file. *@ 
@{ ModelType TrueModel = (ModelType)Model; } 

<div> 
@TrueModel.MyProperty is here now. 
</div> 
<p> @TrueModel.MyOtherProperty is great! </p> 

Non è una soluzione eccezionale, ma potrebbe essere utile.

+0

Ciao @Zachary Dow questo non funziona per me, ho avuto un modello sotto cartella Modello con nome EmailModel, ho un modello HTML in Modelli con il nome EmailTemplate. Ho scritto '@ {EmailModel TrueModel = (EmailModel) EmailModel; } 'e questo non funziona –

+0

puoi aiutarmi in questo –

+0

@ManojKalluri Prima" questo non funziona "non mi dice molto. In secondo luogo, "Modello" è una proprietà speciale in MVC. Quindi vorrai cambiarlo in questo modo: '@ {EmailModel TrueModel = (EmailModel) Modello; } 'probabilmente. –

Problemi correlati