2013-02-08 60 views
5

我試圖在類庫中包含剃鬚刀(cshtml)文件,以包含在單獨的MVC4項目中。我已經得到了一切工作,除了intellisense似乎缺少某些類型,特別是System.Web.Helpers.Json,雖然可能有其他人我還沒有發現。我的問題可能與Razor views: Intellisense not working with C# 3 for class libraries有關,但並不完全相同。下面是我的Razor視圖的樣本:類庫中的剃鬚刀,缺少智能感知

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

當我最初打開剃鬚刀文件,我會看到幾個警告幾種類型的錯誤:

  • 類型或命名空間名稱「動態」不能找到(是否缺少 集引用?)
  • 功能「隱式類型的局部變量」不能被使用,因爲它是不ISO-2 C#語言規範
  • 功能「對象initializ的一部分 呃」不能使用,因爲它不是一部分...
  • 類型或命名空間名稱‘的Json System.Web.Helpers‘ ’不存在命名空間存在’(是否缺少程序集引用?)

當我構建項目時,前兩個三種類型的錯誤消失,但最後一個將會持續。當我輸入System.Web.Helpers.僅包含Antiforgery,UnvalidatedRequestValuesValidation時,會出現智能感知。當我在.cs文件中輸入相同的代碼時,我看到了Json以及我期望看到的所有其他選項。當我將這些文件複製到我的實際MVC項目中時,它不會在編輯器中顯示任何錯誤並且運行得很好。

這裏是Web.config文件我已經添加到我的項目得到它的工作這麼遠:

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

如何讓智能感知認識到這個類?

回答

0

當使用dynamic時,您將失去Intellisense的好處。你應該嘗試使用強類型的視圖。在Controller中,嘗試通過在模型實例中傳遞的View方法的重載來指定模型。這將ViewData.Model屬性的值設置爲傳遞給View方法的值。然後向視圖指示使用@model聲明的模型的類型。您可能需要提供模型類型的完全限定類型名稱。