2012-06-08 176 views
195

我剛剛創建了一個ASP.NET MVC 4項目,並使用Visual Studio 2012 RC爲IndexCreate操作創建了控制器和剃刀視圖。MVC 4 @Scripts「does not exist」

當我來到運行該應用程序,並瀏覽到Create視圖中,示出以下錯誤:

編譯器錯誤消息:CS0103:名稱「腳本」不在 當前上下文存在

的問題是將其自動添加到視圖的底部下面的代碼:

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

爲什麼腳本不存在?

我看着在大會System.Web.Mvc.dll程序的基本網頁類,V4.0.0.0

我可以看到可用下列輔助特性:

  • 阿賈克斯
  • HTML
  • 網址

但沒有命名的腳本。

任何想法?

編輯:

我的web.config文件看起來像這樣(從Visual Studio中創建了一個不變):

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

編輯#2:

人們博客使用@Scripts幫手:

然而,剛剛安裝了Visual Studio 2012 RC到全新的Windows 8安裝我仍然無法使用@Scripts儘管Visual Studio中把它添加到生成查看!

解決方案如下。

我不確定如何關閉此功能,因爲最終更新似乎可以解決問題。我再次檢查我已經執行了一個乾淨的安裝,使用一個新的項目。但是,在我進行了各種更新之後,我所做的同樣的失敗項目已經很好地工作了,而且沒有人工干預。感謝所有的想法,但有一定的時間的問題;)

+0

已經嘗試添加在Web.config中? ' <頁面pageBaseType = 「」> <添加命名空間= 「System.Web.Mvc」/> <添加命名空間= 「System.Web.Mvc.Ajax」/> etc ... ' –

+0

我已經添加了來自Web.config的部分,但我沒有改變該文件中的任何內容。 – FantasticJamieBurns

+6

您的意思是「My Views \ Web.config」文件不是應用程序根目錄web.config。無論如何,這是不正確的,並且缺少。在RC之前安裝了VS12 Beta嗎?什麼win8版本? – RickAndMSFT

回答

258

這裏的關鍵是要

<add namespace="System.Web.Optimization" /> 

同時添加到web.config文件中。我的方案是我在項目和主/根網絡中都有System.Web.Optimization參考。配置,但@Scripts仍然無法正常工作。您需要將名稱空間引用添加到Views web.config文件以使其工作。

UPDATE:

由於MVC 4 System.Web.Optimization的發佈現在已經過時。如果你開始一個空白的解決方案,您將需要安裝以下NuGet包:

Install-Package Microsoft.AspNet.Web.Optimization 

您仍然需要參考System.Web.Optimization在你的web.config文件。欲瞭解更多信息,請參見本主題:

How to add reference to System.Web.Optimization for MVC-3-converted-to-4 app

正如許多人士指出,重啓VS的可以在上述步驟後,被要求使這項工作。

+0

是的,這是正確的。根和視圖web.config。謝謝! – Nestor

+8

您可能還需要從空白的ASP.NET MVC4模板運行'Install-Package Microsoft.AspNet.Web.Optimization',因爲它默認不包含在內。 – Portman

+0

@Portman確實如果你開始使用空白的MVC項目模板,你需要安裝Microsoft.AspNet.Web.Optimization包。 – Marko

2

只要寫

@section Scripts{ 
    <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script> 
} 
+0

@archil感謝您的替換 - 這將是一個很好的臨時解決方案。但主要問題是「爲什麼腳本不存在?」 – FantasticJamieBurns

+0

@Jamie應該存在嗎?我的意思是,據我所知,沒有Scipts幫手在那裏。也許你正在嘗試使用一些第三方幫手? – archil

+1

我沒有自己添加該代碼 - Visual Studio 2012 RC在爲我的創建操作創建視圖時添加了它。我想我的MVC 4不是正確的。它必須在某處工作,因爲Scott Hanselman提到了失敗的語法,因爲它是MVC 4 RC的新增內容:http://www.hanselman.com/blog/VisualStudio2012RCIsReleasedTheBigWebRollup.aspx – FantasticJamieBurns

48

@Styles@Scripts是由System.Web.Optimization庫提供了2個新的幫手。顧名思義,它們分別捆綁和縮小CSS和JavaScript文件或資源。

嘗試包括命名空間System.Web.Optimization無論是@using指令或通過web.config

http://ofps.oreilly.com/titles/9781449320317/ch_ClientOptimization.html#BundlingAndMinification

UPDATE

微軟移動的捆綁/縮小到名爲Microsoft.AspNet.Web.Optimization一個單獨的包。您可以從nuget下載程序集。

post將對您有用。

+2

添加System.Web.Optimization說「CS0234:The類型或名稱空間名稱「優化」在名稱空間「System.Web」中不存在。沒有引用稱爲System.Web.Optimization來添加。 – FantasticJamieBurns

+1

System.Web.Optimization命名空間已被廢棄,因爲這已被回答,請嘗試使用Microsoft.AspNet.Web.Optimization。 查看此問題以獲取更多信息:http://stackoverflow.com/questions/9475893/how-to-add-reference-to-system-web-optimization-for-mvc-3-converted-to-4-app –

+3

澄清:'System.Web.Optimization'命名空間不被棄用,'System.Web.Optimization.dll'爲。 – Despertar

30

我正在使用區域,剛剛遇到了這個問題,我剛剛將根web.config中的命名空間複製到區域web。配置和它現在工作!

<add namespace="System.Web.Helpers" /> 
    <add namespace="System.Web.Mvc" /> 
    <add namespace="System.Web.Mvc.Ajax" /> 
    <add namespace="System.Web.Mvc.Html" /> 
    <add namespace="System.Web.Optimization" />   
    <add namespace="System.Web.Routing" /> 
    <add namespace="System.Web.WebPages" /> 
5

創建一個新的MVC 4 RC互聯網應用程序並運行它。導航到登錄使用相同的代碼

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

什麼讓Login.cshtml工作是視圖\ Web.config文件(而不是應用程序根版)包含

<namespaces> 

    <add namespace="System.Web.Optimization"/> 

    </namespaces> 

爲什麼你創建視圖不工作,登錄是?

+0

我沒有使用登錄 - 當時可能已被打破。 – FantasticJamieBurns

15

我有同樣的問題,我用WinMerge來幫助我追蹤這個問題。但是當我研究它時,我發現瑞克擁有完美的blog post

摘要:

  • 添加<add namespace="System.Web.Optimization"/>既web.config文件中
  • 運行Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
  • 更新捆綁代碼
  • 更新佈局文件
  • 最後一步是更新其他10個圖書館。我沒有,它工作得很好。所以看起來你可以拖延這一個(除非我已經更新了其中的一個或更多)。 :)
+0

感謝您回答這個丹! (並指出我的博客)。他的問題意味着他從RC開始,但我認爲你是對的。他剛剛添加了RC的控制器到一個測試版項目。 – RickAndMSFT

+0

已經過了幾個星期了,你們兩個當然讓我第二次猜測自己。我當然會將VS 2012放到我的平板電腦上,這款平板電腦從來沒有任何東西,但Metro應用程序看到它失敗我將在虛擬機中再次嘗試。 – FantasticJamieBurns

+0

這對我有用。閱讀鏈接的文章,瞭解您需要做什麼的確切說明。 – Justin

11

我有同樣的問題:

我用的是System.Web.Optimization版本已經過時了MVC4 RC。

我更新使用軟件包管理我的包在VS 2010

在這種MSDN blog,先生Andy談到如何將MVC 4 Beta項目更新爲MVC 4 RC。更新我的軟件包得到了腳本(特別是網頁優化軟件)來解決:

要安裝最新的System.Web.Optimization軟件包,請使用軟件包管理器控制檯(工具 - >軟件包管理器 - >軟件包管理器控制檯)並運行以下命令:

Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization 

使用包中引用的包中的System.Web.Optimization文件。

要更新其他軟件包: 工具菜單 - >庫軟件包管理器 - >管理解決方案的NuGet軟件包。

1

我從Beta升級到RC並面臨'腳本'不存在的問題。衝浪所有網站上,最終的解決方案是什麼N40JPJ說,加上另外workaroudn:

複製在查看\ Web.config中的以下內容:

<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"/> 
    <add namespace="System.Web.Helpers"/> 
    </namespaces> 

和內部視圖\ Shared_Layout.cshtml

以下
@if (IsSectionDefined("scripts")) 
{ 
     @RenderSection("scripts", required: false) 
} 

希望它有幫助。

+1

除非你提供'else'子句,否則不需要使用if(IsSectionDefined())。您所說的'required:false'已經允許該部分不被定義,在這種情況下,部分將被省略。所以這是不必要的額外代碼。 – ErikE

3

我就遇到了這個問題,但是在運行命令:

Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization 

我收到了神祕的消息(愛是愛咖啡的第一杯之前,一個偉大的雙關語):

Install-包:在此平臺上支持指定的加密算法不是 。

我在Windows XP SP3上運行這個(沒有選擇的餘地),什麼我發現了,我只好跟着上ASP.NET Forum

  • 發佈由用戶artsnob說明請卸載Nuget並嘗試重新安裝它。如果您無法執行此操作,請以管理員身份登錄。
  • 轉至工具=> Extension Manager =>選擇「Nuget Package Manager」=> UnInstall
  • 通過搜索「Nuget」=> Install來再次安裝它。
  • 如果它不起作用,請嘗試安裝,1.7.x版本,正如我在前面的帖子中提到的(這並不意味着,你必須使用以前的版本,如果它工作正常,我們可以報告這個錯誤,並獲取最新版本的補丁)。

一旦我跑這個,我可以運行命令行來更新Web.Optimization。

希望這節省了一些人的挖掘。

0

將項目從MVC3升級到MVC4時,出現了非常類似的錯誤。

編譯器錯誤信息:CS0103:名稱[胡說]不在 當前上下文

在我的情況存在,我在我的幾個Web.Configs的有過時的版本號。

  1. 我需要在我的項目中的每個Web.Config中將System.Web.Mvc版本號從「3.0.0.0」更新到「4.0.0.0」。
  2. 我需要將我的項目中的每個Web.Config中的所有System.Web.WebPages,System.Web.Helpers和System.Web.Razor版本號從「1.0.0.0」更新爲「2.0.0.0」 。

例:

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

... 

<compilation debug="true" targetFramework="4.0"> 
    <assemblies> 
    <add assembly="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    </assemblies> 
</compilation> 

請務必查看Web.Configs在每個瀏覽目錄。

您可以閱讀更多關於Upgrading an ASP.NET MVC 3 Project to ASP.NET MVC 4

0

顯然你已經創建了一個沒有'Scripts'文件夾的'Empty'項目類型。 我的建議 - 用完整的「腳本」文件夾創建一個'基本'項目類型。

對於所有的開發者。

-1

試試這個:

@section Scripts 
{ 
    Scripts.Render("~/bundles/jqueryval") // <- without ampersand at the begin 
} 
0

只是刪除/隱藏創建控制器的&編輯Razor視圖的代碼。

@section Scripts { 

    @Scripts.Render("~/bundles/jqueryval") 
} 
1
  1. :刪除視圖頁面。
  2. :添加命名空間webconfig(在視圖目錄中)
  3. :創建視圖一個嘗試!

好運...

0

再來一個鍋 - 花了年齡試圖找出同樣的問題 - 即使這是在web.config根和視圖的定義根。原來我錯誤地將它添加到<system.web><pages><namespaces>,而不是<system.web**.webPages.razor**><pages><namespaces>元素。

真的很容易錯過!

44

上面有一小步失蹤,我在另一篇文章中找到了。加入

<add namespace="System.Web.Optimization" /> 

~/Views/web.config命名空間,關閉並重新打開Visual Studio之後。這就是我必須做的才能讓這個工作。

+4

葉..不得不關閉和打開vs ..但爲什麼?射擊本 – 2014-04-25 10:10:29

+1

同樣在這裏,重新啓動VS的工作,但在此之前,它仍然顯示錯誤...? – Andreas

+0

在我的情況下關閉VS並不是必要的,但我不得不關閉並重新打開我正在使用的.cshtml視圖 – joalcego

0

當我是富人此代碼的網頁上輸入:發生

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

此錯誤:錯誤。處理您的請求時發生錯誤。

而且這個例外記錄在我的日誌:

System.Web.HttpException (0x80004005): The controller for path '/bundles/jqueryval' was not found or does not implement IController. 
    em System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) 
... 

我已經試過此頁面上的所有技巧和他們沒有解決我。所以我看着我的包文件夾,發現我有兩個版本System.Web.Optmization.dll:

  • Microsoft.AspNet.Web.Optimization.1.1.0 (v1.1.30515.0 - 68 ,7KB)
  • Microsoft.Web.Optimization.1.0.0-β (V1.0.0.0 - 304KB)

我的項目被引用到舊beta版本。我只改變了對新版本的引用(69KB),並且eveything工作正常。

我認爲這可能有助於某人。

0

這有一個明顯的解決方案。後來我也遇到了同樣的問題。與Assembly References或...沒有關係。它會在MVC Partial視圖的層次結構調用中出現,當你有複雜的頁面結構時。因此調用/每個頁面(可能是母版頁或部分)上分別呈現每個部分會導致看不到頁的所需的零件,如波紋管代碼:

@RenderSection("Scripts", required: false) 

這只是強迫頁面發現和渲染相關的部分,在失敗的情況下顯示你像你一樣的錯誤信息。

所以我建議你跟蹤你的頁面(如程序跟蹤)從主人到所有的偏好檢測依賴關係。也許這是一件可怕的工作,但在這裏沒有其他選擇。

不是說根據我的經驗,編程中的一些條件情況不會告訴你正確的錯誤會導致問題。

0

我在將項目添加到沒有任何項目後出現此問題。 爲了擺脫它只是將web.config與根視圖文件夾複製到該區域的視圖文件夾,它開始工作。

0

我MvcMusicStore解決這個問題,通過在_Layout.cshtml

@if (IsSectionDefined("scripts")) 
{ 
     @RenderSection("scripts", required: false) 
} 

從Edit.cshtml

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

運行添加這部分代碼並刪除該代碼的程序inshallah將與您合作。

0

對我來說,這個問題解決了,在NuGet包管理器控制檯寫入以下內容:

update-package microsoft.aspnet.mvc -reinstall 
0

當我開始使用MVC4最近我遇到上述問題,同時還與空模板的項目。 解決問題的步驟。

  1. 轉到TOOLS - >Library Package Manager - >Packager Manager Console 粘貼下面的命令並按回車鍵 Install-Package Microsoft.AspNet.Web.Optimization 注:等待安裝成功。
  2. 在根級別轉到Web.Config文件並在頁面名稱空間部分添加下面的名稱空間。 添加<namespace="System.Web.Optimization" />
  3. 轉到Web.config文件夾視圖,並按照步驟2
  4. 生成解決方案並運行。

步驟1中提到的軟件包會將少量系統庫添加到解決方案引用中,如System.Web.Optimization不是MVC4中空模板的默認引用。

我希望這會有所幫助。 謝謝

4

導入System.Web.Optimization您Razor視圖的頂部如下:

@using System.Web.Optimization 
相關問題