2013-02-08 33 views
5

Sto cercando di includere file di rasoio (cshtml) in una libreria di classi, da includere in un progetto MVC4 separato. Ho ottenuto tutto funzionante, tranne che l'intellisense sembra mancare per alcuni tipi, in particolare System.Web.Helpers.Json, anche se potrebbero essercene altri che non ho ancora scoperto. Il mio problema potrebbe essere correlato a Razor views: Intellisense not working with C# 3 for class libraries ma non è esattamente lo stesso. Ecco un esempio dal mio punto di vista rasoio:Razor nella libreria di classi, intellisense mancante

@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)) 

Quando inizialmente ho aperto un file rasoio, vedrò diversi avvertimenti diversi tipi di errori:

  • Il tipo o il nome dello spazio dei nomi 'dinamica' non poteva essere trovata (che le manca un riferimento montaggio?)
  • Caratteristica 'implicitamente tipizzato variabile locale' non può essere utilizzato perché non è parte del C specifica ISO-2 # lingua
  • Caratteristica 'oggetto initializ er' non può essere utilizzato perché non è parte ...
  • Il tipo o dello spazio dei nomi il nome 'JSON' non esiste nello spazio dei nomi ' System.Web.Helpers'(che le manca un riferimento all'assembly?)

I primi due errori di tre tipi scompaiono quando si crea il progetto, ma l'ultimo persisterà. L'intellisense appare quando digito System.Web.Helpers. contiene solo Antiforgery, UnvalidatedRequestValues e Validation. Quando digito lo stesso codice in un file .cs, vedo Json e tutte le altre opzioni che mi aspetto di vedere. E quando copio questi file nel mio vero progetto MVC, non mostra errori nell'editor e gira bene.

Ecco il file web.config ho aggiunto al mio progetto per farlo funzionare fino a questo punto:

<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> 

Come faccio ad avere intellisense a riconoscere questa classe?

risposta

0

Quando si utilizza dinamico si perdono i vantaggi di Intellisense. Dovresti provare a utilizzare una vista fortemente tipizzata. Nel controller, provare a specificare il modello tramite un overload del metodo View in cui si passa l'istanza del modello. Imposta il valore della proprietà ViewData.Model sul valore passato nel metodo View. Quindi indicare alla vista quale tipo di modello sta usando la dichiarazione @model. Potrebbe essere necessario fornire il nome di tipo completo del tipo di modello.

Problemi correlati