2014-11-11 6 views
12

Ich versuche, RazorEngine so zu konfigurieren, dass Intellisense auf Ansichten funktioniert. Ich füge RazorEngine und Microsoft.AspNet.Mvc mit nuget hinzu. Ich erstelle TestView.cshtml und erkläre @model MyModel, aber es sagt The name 'model' does not exist in the current context. Ich kann auch nicht intellisense innerhalb der Ansicht verwenden.Wie funktioniert Intellisense mit RazorEngine?

Vermisse ich hier einen Schritt? Wie kann ich Intellisense in der Ansicht aktivieren?

+0

Können Sie ein Beispiel geben (ich vermute, Sie sollten 'Model', nicht' Modell' verwenden) –

+0

sind Sie zufällig über eine Klassenbibliothek erweitert? nur neugierig. – lemunk

+0

Das ist eigentlich die korrekte Syntax für die Modelldeklaration.Es wird jedoch später auf @Model verwiesen. Welche Version von MVC? – markpsmith

Antwort

26

können Sie

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

auf der Oberseite Ihrer Vorlage verwenden.

Dies funktioniert bei einer neuen Konsolenanwendung mit Visual Studio 2013 (nach dem Hinzufügen einer Referenz zu RazorEngine). Die Dokumentation dazu ist here.

EDIT:

Ich bemerkte, dass dies nur funktioniert, wenn das RazorEngine Projekt zur Lösung gegeben wird und direkt verwiesen. Wenn Sie das NuGet Paket benötigen Sie zusätzlich eine der folgenden, um sicherzustellen, damit es funktioniert:

  1. Ihr Projekt Ausgangspfad zu bin\ gesetzt statt bin\Debug\ und bin\Release\.
  2. Copy RazorEngine.dll und System.Web.Razor.dll zu bin\
+5

Aber ich muss @inherits RazorEngine.Templating verwenden .TemplateBase. Die erste using-Anweisung funktioniert nicht für mich. – Dummy

4

Oh, ich mit einem solchen Problem konfrontiert, während das Hinzufügen Razor Engine meine benutzerdefinierte DLL-Projekt. Um dies zu lösen müssen Sie:

1.correctly Setup-Namespaces in Web-Konfigurationsdatei (hoffen, dass Sie es in Ansichten Ordner haben, wenn nicht - von MVC-Projekt kopieren):

<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 zu bauen in bin\ Pfad (nicht andere, können Sie Kopie Post-Build-Befehl bewegen Ergebnisse an einem anderen Ort verwenden)

3.Clean Lösung und entfernen obj und bin Ordner, als

Code

Meine Ansichten zu bauen beginnt fr om und alles funktioniert gut

2

Ich weiß, diese Frage ist irgendwie alt. Ich konnte nichts zur Arbeit bringen, egal welche Lösung. Ich habe eine Hack-Reparatur, die für einige schmackhaft sein kann. Ich mag es nicht sehr, aber es ist das brauchbarste, was ich bisher bekommen habe.

Der Trick besteht darin, das "Modell" selbst als eine Variable aus dem tatsächlichen Modell zu definieren. Ich habe es als "TrueModel" definiert, aber welcher Name auch immer Sie denken, der kollidiert nicht mit "Modell" oder "Modell" sollte funktionieren. Dann ersetzen Sie einfach alle Ihre Instanzen von "Model" durch "TrueModel".

Es ist keine großartige Lösung, aber es könnte nützlich sein.

+0

Hallo @Zachary Dow das funktioniert nicht für mich, ich hatte ein Modell unter dem Ordner Modell mit dem Namen EmailModel, ich habe eine HTML-Vorlage unter Vorlagen mit dem Namen EmailTemplate. Ich schrieb '@ {EmailModel TrueModel = (EmailModel) EmailModel; } 'und das funktioniert nicht –

+0

können Sie mir in diesem –

+0

@ManojKalluri helfen Zuerst" das funktioniert nicht "sagt mir nicht viel. Zweitens ist "Model" eine spezielle Eigenschaft in MVC. Sie sollten es also folgendermaßen ändern: '@ {EmailModel TrueModel = (EmailModel) Model; } wahrscheinlich. –

Verwandte Themen