2013-02-08 5 views
5

Ich versuche, Rasierer (Cshtml) Dateien in einer Klassenbibliothek einzuschließen, um in einem separaten MVC4-Projekt enthalten zu sein. Ich habe alles funktioniert, außer intellisense scheint für bestimmte Typen zu fehlen, speziell System.Web.Helpers.Json, obwohl es andere geben könnte, die ich noch nicht entdeckt habe. Mein Problem könnte mit Razor views: Intellisense not working with C# 3 for class libraries zusammenhängen, aber es ist nicht genau dasselbe. Hier ist ein Beispiel aus meiner Rasierer Ansicht:Razor in der Klassenbibliothek, fehlende Intellisense

@model dynamic 
@{ 
    // ... some code ... 
    var options = new global::System.Web.Mvc.SelectListItem[] 
    { 
     new global::System.Web.Mvc.SelectListItem() 
     { 
      Text = "No", 
      Value = global::System.Web.Helpers.Json.Encode(false) 
     }, 
     new global::System.Web.Mvc.SelectListItem() 
     { 
      Text = "Yes", 
      Value = global::System.Web.Helpers.Json.Encode(true) 
     } 
    }; 
} 
@(global::System.Web.Mvc.Html.SelectExtensions.DropDownList(this.Html, string.Empty, options)) 

Wenn ich zunächst eine Rasierklinge Datei öffnen, habe ich mehrere Warnungen mehrere Arten von Fehlern sehen:

  • Der Typ oder Namespace-Name ‚dynamische‘ konnte nicht gefunden werden (möglicherweise fehlt eine Montage Referenz?)
  • Eigenschaft ‚implizit lokale Variable getippt‘ kann nicht verwendet werden, da sie nicht Teil ist der ISO-2 Sprache C# Spezifikation
  • Eigenschaft ‚Objekt INITIALIZ er‘kann nicht verwendet werden, da sie nicht Teil ist ...
  • Der Typ oder Namespace-Name‚Json ‚ System.Web.Helpers‘ nicht im Namensraum existiert‘(werden Sie eine Montage Referenz fehlt?)

Die ersten zwei drei Fehlertypen gehen weg, wenn ich das Projekt erstelle, aber das letzte wird bestehen bleiben. Das Intellisense erscheint, wenn ich System.Web.Helpers. nur Antiforgery, UnvalidatedRequestValues und Validation eintippe. Wenn ich denselben Code in eine CS-Datei eintippe, sehe ich Json und alle anderen Optionen, die ich erwarten würde. Und wenn ich diese Dateien in mein aktuelles MVC-Projekt kopiere, zeigt es keine Fehler im Editor und läuft gut.

Hier wird die Datei Web.config ich zu meinem Projekt hinzugefügt haben es funktioniert so weit kommen:

<configuration> 
    <configSections> 
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
     <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> 
     <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> 
    </sectionGroup> 
    </configSections> 

    <system.web.webPages.razor> 
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.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.Helpers" /> 
     </namespaces> 
    </pages> 
    </system.web.webPages.razor> 

    <appSettings> 
    <add key="webpages:Enabled" value="false" /> 
    </appSettings> 

    <system.web> 
    <compilation targetFramework="4.0"> 
     <assemblies> 
     <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 
     <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 
     <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> 
     <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 
     <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     </assemblies> 
    </compilation> 

    <httpHandlers> 
     <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/> 
    </httpHandlers> 
    <pages 
     validateRequest="false" 
     pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
     pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
     userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
     <controls> 
     <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" /> 
     </controls> 
    </pages> 
    </system.web> 
    <system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <handlers> 
     <remove name="BlockViewHandler"/> 
     <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> 
    </handlers> 
    </system.webServer> 
</configuration> 

Wie kann ich Intellisense bekommen diese Klasse zu erkennen?

Antwort

0

Wenn Sie dynamische verwenden, verlieren Sie die Vorteile von Intellisense. Sie sollten versuchen, eine stark typisierte Ansicht zu verwenden. Versuchen Sie im Controller, das Modell über eine Überladung der View-Methode anzugeben, an der Sie die Modellinstanz übergeben. Dadurch wird der Wert der ViewData.Model-Eigenschaft auf den Wert festgelegt, der an die View-Methode übergeben wird. Zeigen Sie dann der Ansicht an, welcher Modelltyp die @ Model-Deklaration verwendet. Möglicherweise müssen Sie den vollständig qualifizierten Typnamen des Modelltyps angeben.

Verwandte Themen