2013-02-08 16 views
5

Próbuję dołączyć pliki brzytwy (cshtml) do biblioteki klas, które mają być zawarte w oddzielnym projekcie MVC4. Dostałem wszystko działa, z wyjątkiem intellisense wydaje się być brakuje dla niektórych typów, w szczególności System.Web.Helpers.Json, choć mogą istnieć inne, których jeszcze nie odkryłem. Mój problem może być związany z Razor views: Intellisense not working with C# 3 for class libraries, ale nie jest dokładnie taki sam. Oto przykład z moim zdaniem brzytwa:Maszynka do golenia w bibliotece klas, brakująca 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)) 

Kiedy początkowo otworzyć plik z ostrzami, będę zobaczyć kilka ostrzeżeń kilka rodzajów błędów:

  • typu lub nazwa przestrzeni nazw „dynamiczny” nie mógł znaleźć (czy brakuje odwołania zestawu?)
  • fabularny „niejawnie wpisywanych zmiennej lokalnej” nie może być stosowane, ponieważ nie jest częścią z języka C# specyfikacją ISO-2
  • Feature „obiekt initializ er”nie może być stosowane, ponieważ nie jest częścią ...
  • typu lub obszaru nazwa«Json»nie istnieje w obszarze nazw« System.Web.Helpers»(czy brakuje odwołania do zestawu?)

Pierwsze dwa błędy trzech typów znikają, gdy buduję projekt, ale ostatni będzie się utrzymywał. Intellisense pojawia się, gdy wpisz System.Web.Helpers. zawiera tylko Antiforgery, UnvalidatedRequestValues i Validation. Kiedy wpisuję ten sam kod w pliku .cs, widzę Json i wszystkie inne opcje, które mógłbym zobaczyć. A kiedy kopiuję te pliki do mojego rzeczywistego projektu MVC, to nie pokazuje żadnych błędów w edytorze i działa dobrze.

Oto plik Web.config dodałem do mojego projektu, aby to działa tak daleko:

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

Jak uzyskać intellisense do uznania tej klasy?

Odpowiedz

0

Podczas korzystania z dynamic użytkownik traci korzyści z IntelliSense. Powinieneś spróbować użyć silnie wpisanego widoku. W kontrolerze spróbuj podać model poprzez przeciążenie metody View, w której przechodzisz w instancji modelu. Ustawia to wartość właściwości ViewData.Model na wartość przekazywaną do metody View. Następnie wskaż w widoku, jaki typ modelu używa deklaracji @model. Może być konieczne podanie w pełni kwalifikowanej nazwy typu modelu.

Powiązane problemy