MVC 4 @Scripts “mevcut değil”


201

Bir ASP.NET MVC 4 projesi oluşturdum ve Visual Studio 2012 RC'yi Denetleyici ve Jilet Görünümleri Indexve CreateEylemler oluşturmak için kullandım .

Uygulamayı çalıştırmaya geldiğimde ve Creategörünüme göz attığımda , aşağıdaki hata gösterildi:

Derleyici Hata İletisi: CS0103: 'Komut Dosyaları' adı geçerli bağlamda mevcut değil

Sorun, görünümün altına otomatik olarak eklenen şu koddur:

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

Komut Dosyaları neden mevcut değil?

Assembly System.Web.Mvc.dll, v4.0.0.0 temel Web Sayfası sınıfına baktım

Aşağıdaki yardımcı özellikleri görebiliyorum:

  • ajax
  • Html
  • URL

Ama Scripts adında bir şey yok.

Herhangi bir fikir?

DÜZENLE:

Web.config dosyam şöyle görünüyor (Visual Studio'nun oluşturduğu dosyaya dokunulmamış):

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

DÜZENLEME # 2:

İnsanlar @Scriptsyardımcıyı kullanma hakkında blog yazıyor:

Henüz Visual Studio 2012 RC'yi yeni bir Windows 8 kurulumuna yükledikten sonra, @ScriptsVisual Studio oluşturulan Görünüm'e eklemesine rağmen hala kullanamıyorum !

Çözümler aşağıda sunulmuştur.

Bunun nasıl kapatılacağından emin değilim, çünkü sonunda bir güncelleme sorunu çözdü. Yeni bir proje kullanarak temiz bir kurulum yaptığımı iki kez kontrol ettim. Ancak yaptığım aynı başarısız proje, çeşitli güncellemelerden sonra ve el ile bariz bir müdahaleden sonra iyi çalışıyor. Tüm düşünceler için teşekkürler ama o zaman kesinlikle bir sorun vardı;)


Web.config dosyasına zaten eklemeyi denediniz mi? <system.web.webPages.razor> <pages pageBaseType=""> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> etc... </pages>
Zach dev

Bölümü Web.config'den ekledim, ancak bu dosyadaki hiçbir şeyi değiştirmedim.
FantasticJamieBurns

6
Uygulama kökeni web.config değil, "Görünümlerim \ Web.config" dosyasını kastediyorsunuz. Her durumda yanlış ve eksik <add namespace = "System.Web.Optimization" />. RC'den önce VS12 Beta'yı kurdunuz mu? Hangi win8 sürümü?
RickAndMSFT

@RickAndMSFT Sürüm önleme çakışması olmadığından emin olmak için VS 2012 RC ISO kurulumuyla birlikte Release Preview ISO'dan temiz bir Win8 kurulumu yaptım.
FantasticJamieBurns

@RickAndMSFT Görüşlerim \ Web.config Bölgelerdeki Görünümleri Kaçırır
Maslow

Yanıtlar:


269

Buradaki anahtar

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

HEM web.config dosyalarına. Benim senaryom, hem proje hem de ana / kök web.config System.Web.Optimization başvurum vardı ama @Scripts hala düzgün çalışmadı oldu. Çalışmasını sağlamak için Views web.config dosyasına ad alanı başvurusunu eklemeniz gerekir.

GÜNCELLEME:

MVC 4 System.Web.Optimization piyasaya çıktığından beri artık kullanılmıyor. Boş bir çözümle başlıyorsanız, aşağıdaki külçe paketini yüklemeniz gerekir:

Install-Package Microsoft.AspNet.Web.Optimization

Yine de web.config dosyalarınızda System.Web.Optimization öğesine başvurmanız gerekir. Daha fazla bilgi için bu konuya bakın:

MVC-3-4'e dönüştürülmüş uygulama için System.Web.Optimization'a referans ekleme

Birçoğunun işaret ettiği gibi, VS'nin yeniden başlatılması bu çalışmayı yapmak için yukarıdaki adımlardan sonra gerekebilir.


8
Install-Package Microsoft.AspNet.Web.OptimizationVarsayılan olarak eklenmediği için boş bir ASP.NET MVC4 şablonundan da çalıştırmanız gerekebilir .
Portman

@Portman Evet, boş bir MVC proje şablonu ile başladıysanız, Microsoft.AspNet.Web.Optimization paketini kurmanız gerekir.
Marko

2
Yalnızca benim için Views klasöründeki web.config dosyasına eklenmesi gerekir.
user1534664

9
Gerçekten de çözüm budur. Ancak bunun tanınması için visual studio'yu yeniden başlatmam gerekiyordu.
Jason Eades

4
Bunu Views / Web.config dosyasına eklemek ve Visual Studio'yu yeniden başlatmak zorunda kaldım.
Caverman

48

@Stylesve kütüphane @Scriptstarafından sağlanan 2 yeni yardımcıdır System.Web.Optimization. Adından da anlaşılacağı gibi, sırasıyla CSS ve JavaScript dosyalarını veya kaynaklarını bir araya getirir ve küçültür.

Ad dahil deneyin System.Web.Optimizationyoluyla @usingdirektif veya içindenweb.config

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

GÜNCELLEME

Microsoft birleştirme / küçültme adlı ayrı bir pakete taşındı Microsoft.AspNet.Web.Optimization. Montajı nuget'ten indirebilirsiniz .

Bu yayın sizin için yararlı olacaktır.


2
System.Web.Optimization eklendiğinde "CS0234: 'System.Web ad alanında tür veya ad alanı adı yok' Optimizasyon 'yok. Eklemek için System.Web.Optimization adlı bir başvuru yoktur.
FantasticJamieBurns

1
System.Web.Optimization ad alanı bu yanıtlandığından beri kullanılmıyor, bunun yerine Microsoft.AspNet.Web.Optimization'ı kullanmayı deneyin. Daha fazla bilgi için bu soruya bakın: stackoverflow.com/questions/9475893/…
Jeremy Jarrell

3
Açıklama: Ad System.Web.Optimizationalanı kullanımdan kaldırılmış DEĞİLDİR System.Web.Optimization.dll.
Despertar

Teşekkürler! Farklı ALANIN Yerleşimiyle ilgili sorun yaşadığımda benim için çalışıyor.
Geliştirici

48

Yukarıdakilerden eksik, başka bir gönderide bulduğum küçük bir adım vardı. Ekledikten sonra

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

~/Views/web.configad alanlarınıza ekleyin , Visual Studio'yu kapatın ve yeniden açın. Bunu yapabilmek için yapmam gereken buydu.


2
Aynı burada, VS yeniden başlatma çalıştı ama ondan önce hala hatayı gösterdi ...?
Andreas

Benim durumumda VS kapatma gerekli değildi ama ben kullandığım .cshtml görünümünü kapatmak ve yeniden açmak zorunda
joalcego

29

Alanları kullanıyorum ve bu soruna karşı geldim, sadece kök web.config'den alanların webine ad alanlarını kopyaladım. config ve şimdi çalışıyor !!

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

15

Aynı sorunu yaşadım ve bunu izlememe yardımcı olması için WinMerge kullandım. Ama daha fazla araştırdığımda, Rick'in bunun için mükemmel bir blog yayınına sahip olduğunu buldum .

Özet:

  • <add namespace="System.Web.Optimization"/>Her iki web.config dosyasına da ekleyin
  • Çalıştırmak Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
  • Paket kodunu güncelleme
  • Düzen dosyasını güncelleme
  • Son adım, diğer 10 kütüphaneyi güncellemektir. Ben yapmadım ve iyi çalıştı. Yani (1 veya daha fazla güncellemediysem) bunu erteleyebileceğiniz anlaşılıyor. :)

Bu Dan'a cevap verdiğiniz için teşekkürler! (Ve bloguma işaret ediyor). Sorusu RC ile başladığını ima etti, ama bence haklısın. Bir Beta projesine RC'li bir kontrolör ekledi.
RickAndMSFT

Birkaç hafta oldu ve ikiniz de kesinlikle kendimi tahmin ediyorum. Kesinlikle Metro Apps dışında hiçbir şey yoktu ve başarısız gördüm benim tablet VS 2012 koymak. Bir VM'de tekrar deneyeceğim.
FantasticJamieBurns

Bu benim için çalıştı. Ne yapmanız gerektiği konusunda tam talimatlar için bağlantılı makaleyi okuyun.
Justin

11

Aynı sorunu yaşadım:

Kullandığım System.Web.Optimization sürümü MVC4 RC için eskiydi.

VS 2010'daki paketlerimi kullanarak paketlerimi güncelledim.

Bu MSDN blogunda , Bay Andy, MVC 4 Beta projenizi MVC 4 RC'ye nasıl güncelleyeceğinizi anlatıyor. Paketlerimi güncellemek benim için çözmek için Komut Dosyaları (özellikle web optimizasyonu bir) aldı:

En son System.Web.Optimization paketini yüklemek için Paket Yöneticisi Konsolu'nu (Araçlar -> Kütüphane Paket Yöneticisi -> Paket Yöneticisi Konsolu) kullanın ve aşağıdaki komutu çalıştırın:

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

Referanslarınızda pakette bulunan System.Web.Optimization dosyasını kullanın.

Diğer paketleri güncellemek için: Araçlar menüsü -> Kütüphane Paketi Yöneticisi -> Çözüm için NuGet Paketlerini Yönet.


5

Yeni bir MVC 4 RC internet uygulaması oluşturun ve çalıştırın. Aynı kodu kullanan Giriş'e gidin

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

Login.cshtml'in çalışmasına izin veren, Views \ Web.config dosyasının (uygulama kök sürümü değil)

<namespaces>

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

  </namespaces>

Create görünümünüz neden çalışmıyor ve Giriş Yapılıyor?


Login kullanmıyordum - o zamanlar kırılmış olabilir.
FantasticJamieBurns

5

İthalat Sistemi.Web.Optimizasyon, jilet görünümünüzün üstünde aşağıdaki gibi:

@using System.Web.Optimization

3

Ancak bu komutu çalıştırırken komutu çalıştırırken:

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

Cryptic mesajını aldım (ilk fincan kahveden önce büyük bir yumruk yapmalıyım):

Kurulum Paketi: Belirtilen şifreleme algoritması bu platformda desteklenmiyor.

Bunu Windows XP SP3 üzerinde çalıştırıyorum (seçerek değil) ve bulduğum şey, kullanıcı artsnob tarafından ASP.NET Forumunda yayınlanan talimatları takip etmek zorunda olduğum

  • Lütfen Nuget'i kaldırın ve yeniden yüklemeyi deneyin. Bunu yapamıyorsanız Yönetici olarak oturum açın.
  • Araçlar => Extension Manager => "Nuget Paket Yöneticisi" => UnInstall'ı seçin
  • "Nuget" => Yükle'yi arayarak yeniden kurun.
  • Eğer işe yaramadıysa, lütfen önceki yazıda belirttiğim gibi 1.7.x sürümünü yüklemeyi deneyin (Bu, önceki sürümü kullanmanız gerektiği anlamına gelmez, eğer iyi çalışırsa, bu hatayı rapor edebilir ve en son sürüm için yamalar).

Bunu çalıştırdıktan sonra Web.Optimization'ı güncellemek için komut satırını çalıştırabilirim.

Umarım bu birisi kazma kurtarır.


2

Sadece yaz

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

@archil Değiştirme için teşekkürler - bu iyi bir geçici çözüm olacaktır. Ancak asıl soru "Komut Dosyaları neden mevcut değil?"
FantasticJamieBurns

@Jamie var mı? Demek istediğim, hatırladığım kadarıyla, orada Scipts yardımcısı yok. Belki bazı üçüncü taraf yardımcılarını kullanmaya çalışıyorsunuz?
archil

1
Bu kodu kendim eklemedim - Visual Studio 2012 RC, Oluşturma Eylemim için Görünüm oluşturduğunda ekledi. Bence bir şekilde MVC 4'üm doğru değil. Bir yerde çalışmalı çünkü Scott Hanselman, başarısız sözdiziminden MVC 4 RC'ye yeni bir ek olarak bahsetti: hanselman.com/blog/…
FantasticJamieBurns

1

Beta sürümünden RC sürümüne geçtim ve 'Scripts' sorunu yok. Web'in her yerinde dolaştı ve son çözüm N40JPJ'nin söylediği şey artı bir başka geçici çözüm:

View \ Web.config dosyasına aşağıdakileri kopyalayın:

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

ve View \ Shared_Layout.cshtml içinde aşağıdakiler

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

Umarım yardımcı olur.


1
if (IsSectionDefined())Bir elsehüküm sağlamadığınız sürece kullanmaya gerek yoktur . Söylediğiniz gerçeği required: false, bu bölümün tanımlanmamasına izin verir ve bu durumda bölüm atlanır. Yani bu gereksiz ekstra kod.
ErikE

0

Görünüşe göre 'Komut Dosyaları' klasörü olmadan bir 'Boş' proje türü oluşturdunuz. Benim tavsiyem - tam 'Komut Dosyaları' klasörü ile bir 'Temel' proje türü oluşturun.

Tüm geliştiriciler ile ilgili olarak.


0

sadece denetleyicinizin jilet görünümünü oluştur ve düzenle kodunu gizleyin / gizleyin.

 @section Scripts {  

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

0
  1. : görünüm sayfasını kaldır.
  2. : ad alanı webconfig ekle (görünüm dizininde)
  3. : bir deneme oluştur!

iyi şanslar...


0

Bir kez daha - web.config dosyasında root ve Views kökünde tanımlanmış olsa da, aynı sorunu çözmeye çalışan yaşları harcamak için bir tane daha. Yanlışlıkla eklediğim ortaya çıkıyor <system.web><pages><namespaces>, değil<system.web**.webPages.razor**><pages><namespaces> öğeye öğeye .

Bunu kaçırmak gerçekten kolay!


0

Bu kodu taşıyan bir sayfaya girdiğimde:

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

Bu hata oluşur: Hata. İşleminiz gerçekleştirilirken bir hata oluştu.

Ve bu istisna günlüklerime kaydedilir:

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

Bu sayfadaki tüm ipuçlarını denedim ve hiçbiri benim için çözülmedi. Bu yüzden Paketlerim klasörüne baktım ve System.Web.Optmization.dll için iki sürümünün olduğunu fark ettim:

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

Projem eski beta sürümüne atıfta bulunuyordu. Sadece yeni sürüme (69KB) referansı değiştirdim ve her şey iyi çalıştı.

Sanırım birine yardım edebilir.


0

Bunun bariz bir çözümü var. Aynı problemi daha sonra yaşadım. Montaj Referansları veya ... ile ilgili değildir. Karmaşık sayfa yapılarınız olduğunda MVC Kısmi görünümlerin hiyerarşi çağrısında gerçekleşir. Bu nedenle, her bir parçayı her sayfada (belki bir ana sayfa veya kısmi) ayrı ayrı çağırmak / oluşturmak, sayfanın aşağıdaki kod gibi gerekli bölümlerini görmemesine neden olur:

@RenderSection("Scripts", required: false)

Bu, sayfayı ilgili bölümü bulmaya ve oluşturmaya zorlar ve arıza durumunda size bir hata mesajı gösterir.

Bu nedenle sayfalarınızı (program izleme gibi) kalıptan Bağımlılıkları Algılamak için tüm bölümlerine kadar izlemenizi öneririm . Belki korkunç bir iş olabilir, ama burada başka seçenek yok.

Deneyimlerime göre, programlamadaki bazı koşullu durumlar size doğru hatanın gösterilmemesine neden oluyor.


0

Bu sorunu olmayan bir projeye Alan ekledikten sonra yaşadım. Bundan kurtulmak için web.config kök kökleri klasörünü alanın Views klasörüne kopyaladı ve çalışmaya başladı.


0

_Layout.cshtml kodun bu bölümünü ekleyerek MvcMusicStore bu sorunu çözmek

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

ve bu kodu Edit.cshtml dosyasından kaldırın

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

Programı çalıştırın inshallah sizinle birlikte çalışacaktır.


0

Benim için bu sorunu çözdü, NuGet paket yöneticisi konsolunda aşağıdakileri yazın:

update-package microsoft.aspnet.mvc -reinstall

0

Son zamanlarda MVC4 kullanmaya başladığımda boş şablonlarla bir proje oluştururken yukarıdaki sorunla karşı karşıya kaldım. Sorunu giderme adımları.

  1. Git TOOLS-> Library Package Manager-> Packager Manager Console Aşağıdaki komutu yapıştırın ve enter tuşuna basın Install-Package Microsoft.AspNet.Web.Optimization Not: başarılı kurulum için bekleyin.
  2. Web.Config dosyasına kök düzeyinde gidin ve sayfaların ad alanı bölümüne aşağıdaki ad alanını ekleyin. Ekle<namespace="System.Web.Optimization" />
  3. Views klasöründe Web.Config dosyasına gidin ve 2. adımı izleyin.
  4. Çözümü oluşturun ve çalıştırın.

1. adımda bahsedilen Paket, System.Web.Optimization gibi çözüm başvurularına birkaç sistem kitaplığı ekleyecektir. MVC4'teki boş şablonlar için varsayılan bir başvuru değildir.

Umarım bu yardımcı olur. teşekkür ederim


0

Bir projeyi MVC3'ten MVC4'e yükseltirken çok benzer bir hatayla karşılaştım.

Derleyici Hata İletisi: CS0103: [blah] adı geçerli bağlamda yok

Benim durumumda, birkaç Web.Configs sürümünde eski sürüm numaraları vardı.

  1. Projemdeki her Web.Config içinde System.Web.Mvc sürüm numarasını "3.0.0.0" dan "4.0.0.0" 'a güncelleştirmek gerekiyordu.
  2. Projemdeki her Web.Config dosyasında System.Web.WebPages, System.Web.Helpers ve System.Web.Razor sürüm numaralarının tümünü "1.0.0.0" dan "2.0.0.0" 'a güncellemem gerekiyordu.

Ör:

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

Views dizinlerinizin her birinde Web.Config dosyalarını gözden geçirdiğinizden emin olun.

ASP.NET MVC 3 Projesini ASP.NET MVC 4'e Yükseltme hakkında daha fazla bilgi edinebilirsiniz .


0

Web.config dosyasına eklediyseniz ve hala mesaj gösteriyorsa, projenizi kapatmanız ve yeniden açmanız gerekir, şimdi mevcut olacak ve @ Styles.Render ("") ve @ Scripts.Render () iyi çalışacaktır.


-1

Bunu dene:

@section Scripts 
{
    Scripts.Render("~/bundles/jqueryval")  // <- without ampersand at the begin
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.