MVC 4 @ Script “tidak ada”

201

Saya baru saja membuat proyek ASP.NET MVC 4 dan menggunakan Visual Studio 2012 RC untuk membuat Controller dan Razor Views Indexdan CreateActions.

Ketika saya datang untuk menjalankan aplikasi, dan melihat- Createlihat, kesalahan berikut ditunjukkan:

Pesan Kesalahan Kompiler: CS0103: Nama 'Script' tidak ada dalam konteks saat ini

Masalahnya adalah kode berikut yang ditambahkan secara otomatis ke bagian bawah tampilan:

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

Mengapa Naskah tidak ada?

Saya melihat kelas Halaman Web dasar di Assembly System.Web.Mvc.dll, v4.0.0.0

Saya dapat melihat properti pembantu berikut ini tersedia:

  • Ajax
  • Html
  • Url

Tapi tidak ada yang bernama Script.

Ada ide?

EDIT:

File Web.config saya terlihat seperti ini (tidak tersentuh dari yang dibuat 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>

EDIT # 2:

Orang-orang menulis blog tentang menggunakan @Scriptshelper:

Namun setelah menginstal Visual Studio 2012 RC ke instalasi Windows 8 yang baru, saya masih tidak dapat menggunakan @Scriptsmeskipun Visual Studio menambahkannya ke tampilan yang dihasilkan!

Solusi disajikan di bawah ini.

Saya tidak yakin bagaimana menutup ini, karena pada akhirnya pembaruan tampaknya menyelesaikan masalah. Saya mengecek ulang saya telah melakukan instalasi bersih, menggunakan proyek baru. Tetapi proyek gagal yang sama yang saya buat sekarang berfungsi dengan baik setelah berbagai pembaruan dan tidak ada intervensi manual yang jelas. Terima kasih atas semua pemikirannya tetapi pasti ada masalah pada saat itu;)

FantasticJamieBurns
sumber
sudah coba tambahkan di Web.config? <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
Saya telah menambahkan bagian dari Web.config, tetapi saya belum mengubah apa pun di file itu.
FantasticJamieBurns
6
Maksud Anda file "My Views \ Web.config" bukan aplikasi root web.config. Bagaimanapun, itu salah dan tidak ada <add namespace = "System.Web.Optimization" />. Apakah Anda menginstal VS12 Beta sebelum RC? Apa versi win8?
RickAndMSFT
@RickAndMSFT Saya melakukan instalasi Win8 yang bersih dari Release Preview ISO, bersama dengan instalasi dari VS 2012 RC ISO, untuk memastikan bahwa itu bukan konflik versi.
FantasticJamieBurns
@RickAndMSFT My Views \ Web.config akan melewatkan Tampilan apa pun di Area
Maslow

Jawaban:

269

Kuncinya di sini adalah menambahkan

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

ke KEDUA file web.config. Skenario saya adalah bahwa saya mempunyai referensi System.Web.Optimization di kedua proyek dan web.config utama / root tetapi @ Script masih tidak berfungsi dengan baik. Anda perlu menambahkan referensi namespace ke file Views web.config untuk membuatnya berfungsi.

MEMPERBARUI:

Sejak rilis MVC 4 System.Web.Optimisasi sekarang sudah usang. Jika Anda memulai dengan solusi kosong, Anda harus menginstal paket nuget berikut:

Install-Package Microsoft.AspNet.Web.Optimization

Anda masih perlu merujuk System.Web.Optimasi dalam file web.config Anda. Untuk informasi lebih lanjut, lihat topik ini:

Cara menambahkan referensi ke System.Web.Optimisasi untuk aplikasi MVC-3-dikonversi-ke-4

Seperti yang banyak ditunjukkan, restart VS dapat diperlukan setelah langkah-langkah di atas untuk membuat pekerjaan ini.

Marko
sumber
8
Anda mungkin juga harus menjalankan Install-Package Microsoft.AspNet.Web.Optimizationdari template ASP.NET MVC4 kosong karena tidak disertakan secara default.
Portman
@ Portman Ya memang jika Anda mulai dengan template proyek MVC kosong Anda harus menginstal paket Microsoft.AspNet.Web.Optimization.
Marko
2
Itu hanya perlu ditambahkan di web.config di folder Views untuk saya.
user1534664
9
Ini memang solusinya. Namun, saya perlu memulai ulang studio visual agar ini dikenali.
Jason Eades
4
Saya harus menambahkan ini ke Views / Web.config saya dan kemudian restart Visual Studio.
Caverman
48

@Stylesdan @Scripts2 pembantu baru disediakan oleh System.Web.Optimizationperpustakaan. Seperti namanya, mereka membundel dan memperkecil CSS atau file JavaScript atau sumber daya masing-masing.

Coba sertakan namespace System.Web.Optimizationbaik dengan @usingarahan atau melaluiweb.config

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

MEMPERBARUI

Microsoft telah memindahkan bundling / minifikasi ke paket terpisah yang disebut Microsoft.AspNet.Web.Optimization. Anda dapat mengunduh perakitan dari nuget .

Posting ini akan bermanfaat bagi Anda.

VJAI
sumber
2
Menambahkan System.Web.Optimization mengatakan "CS0234: Tipe atau nama namespace 'Optimasi' tidak ada di namespace 'System.Web". Tidak ada referensi yang disebut System.Web.Optimation untuk menambahkan.
FantasticJamieBurns
1
Namespace System.Web.Optimation telah dibuat usang sejak ini dijawab, coba gunakan Microsoft.AspNet.Web.Optimization sebagai gantinya. Lihat pertanyaan ini untuk info lebih lanjut: stackoverflow.com/questions/9475893/…
Jeremy Jarrell
3
Klarifikasi: System.Web.OptimizationNamespace TIDAK usang, System.Web.Optimization.dllitu.
Despertar
Terima kasih! Ini bekerja untuk saya ketika saya mendapat masalah dengan Layout dari AREA yang berbeda.
Pengembang
48

Ada satu langkah kecil yang hilang dari atas, yang saya temukan di pos lain. Setelah menambahkan

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

ke ~/Views/web.configruang nama Anda , tutup dan buka kembali Visual Studio. Inilah yang harus saya lakukan untuk membuatnya bekerja.

Ben
sumber
2
Sama di sini, restart VS bekerja tetapi sebelum itu masih menunjukkan kesalahan ...?
Andreas
Menutup VS tidak diperlukan dalam kasus saya, tetapi saya harus menutup dan membuka kembali tampilan .cshtml yang saya gunakan
joalcego
29

Saya menggunakan area, dan baru saja menghadapi masalah ini, saya hanya menyalin ruang nama dari root web.config ke area web. config dan sekarang berfungsi !!

    <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" />
N40JPJ
sumber
15

Saya memiliki masalah yang sama dan saya menggunakan WinMerge untuk membantu saya melacak ini. Tetapi ketika saya meneliti lebih lanjut, saya menemukan bahwa Rick memiliki posting blog yang sempurna untuk itu.

Ringkasan:

  • Menambahkan <add namespace="System.Web.Optimization"/> ke kedua file web.config
  • Lari Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
  • Perbarui kode Bundling
  • Perbarui file Tata Letak
  • Langkah terakhir adalah memperbarui 10 perpustakaan lain. Saya tidak melakukannya dan itu bekerja dengan baik. Jadi sepertinya Anda dapat menunda-nunda yang ini (kecuali saya sudah memperbarui 1 atau lebih dari mereka). :)
Dan Friedman
sumber
Terima kasih telah menjawab Dan ini! (Dan menunjukkan blog saya). Pertanyaannya menyiratkan dia mulai dengan RC, tapi saya pikir Anda benar. Dia baru saja menambahkan pengontrol dengan RC ke proyek Beta.
RickAndMSFT
Sudah beberapa minggu dan Anda berdua tentu saja membuat saya menebak-nebak. Saya tentu saja memasukkan VS 2012 ke tablet saya yang tidak pernah memiliki apa pun selain Metro Apps dan melihatnya gagal. Saya akan coba lagi di VM.
FantasticJamieBurns
Ini berhasil untuk saya. Baca artikel tertaut untuk instruksi yang tepat tentang apa yang perlu Anda lakukan.
Justin
11

Saya memiliki masalah yang sama:

Versi System.Web.Optimization yang saya gunakan sudah usang untuk MVC4 RC.

Saya memperbarui paket saya menggunakan manajer paket di VS 2010.

Di blog MSDN ini , Tn. Andy berbicara tentang cara memperbarui proyek MVC 4 Beta Anda ke MVC 4 RC. Memperbarui paket-paket saya membuat Skrip (terutama yang optimasi web) untuk saya selesaikan:

Untuk menginstal paket System.Web.Optimization terbaru, gunakan Package Manager Console (Tools -> Library Package Manager -> Package Manager Console) dan jalankan perintah di bawah ini:

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

Gunakan file System.Web.Optimation termasuk dalam paket dalam referensi Anda.

Untuk memperbarui paket lain: Alat menu -> Manajer Paket Perpustakaan -> Kelola Paket NuGet untuk Solusi.

WWC
sumber
5

Buat aplikasi internet MVC 4 RC baru dan jalankan. Arahkan ke Login yang menggunakan kode yang sama

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

Apa yang memungkinkan Login.cshtml berfungsi adalah file Views \ Web.config (bukan versi root aplikasi)

<namespaces>

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

  </namespaces>

Mengapa tampilan Buat Anda tidak berfungsi dan Masuk?

RickAndMSFT
sumber
Saya tidak menggunakan Login - yang mungkin telah rusak pada saat itu.
FantasticJamieBurns
5

Impor System.Web.Optimasi di atas tampilan pisau cukur Anda sebagai berikut:

@using System.Web.Optimization
xAditya3393
sumber
3

Saya mengalami masalah ini, namun saat menjalankan perintah:

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

Saya menerima pesan rahasia (harus menyukai permainan kata-kata yang bagus sebelum secangkir kopi pertama):

Paket-Instal: Algoritma kriptografi yang ditentukan tidak didukung pada platform ini.

Saya menjalankan ini pada Windows XP SP3 (bukan karena pilihan) dan apa yang saya temukan adalah bahwa saya harus mengikuti instruksi yang diposting oleh pengguna artsnob di Forum ASP.NET

  • Hapus instalan Nuget dan coba instal ulang. Jika Anda tidak dapat melakukan ini, login sebagai Administrator.
  • Buka Tools => Extension Manager => Pilih "Nuget Package Manager" => Uninstall
  • Instal lagi, dengan mencari "Nuget" => Instal.
  • Jika tidak berhasil, coba instal versi 1.7.x seperti yang saya sebutkan di posting sebelumnya (Itu tidak berarti, Anda harus menggunakan versi sebelumnya, jika berfungsi dengan baik, kami dapat melaporkan bug ini, dan mendapatkan tambalan untuk versi terbaru).

Setelah saya menjalankan ini, saya kemudian dapat menjalankan baris perintah untuk memperbarui Web.Optimasi.

Semoga ini menyelamatkan seseorang menggali.

Jake1164
sumber
2

Cukup tulis

@section Scripts{
    <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>
}
Archil
sumber
@archil Terima kasih atas penggantiannya - itu akan menjadi solusi sementara yang bagus. Tetapi pertanyaan utamanya adalah "Mengapa naskah tidak ada?"
FantasticJamieBurns
@ Jamie apakah itu ada? Maksud saya, sejauh yang saya ingat, tidak ada pembantu Scipts di luar sana. Mungkin Anda mencoba menggunakan pembantu pihak ketiga?
archil
1
Saya tidak menambahkan kode itu sendiri - Visual Studio 2012 RC menambahkannya ketika itu menciptakan View for my Create Action. Saya pikir entah bagaimana MVC 4 saya bukan yang tepat. Ini harus bekerja di suatu tempat karena Scott Hanselman menyebutkan sintaks yang gagal sebagai tambahan baru untuk MVC 4 RC: hanselman.com/blog/…
FantasticJamieBurns
1

Saya memutakhirkan dari Beta ke RC dan menghadapi 'Skrip' tidak ada masalah. Berselancar di seluruh web dan solusi terakhir adalah apa yang dikatakan N40JPJ plus workaroudn lainnya:

Salin yang berikut di View \ 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>

dan berikut ini di dalam View \ Shared_Layout.cshtml

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

Semoga ini bisa membantu.

Mohsen Afshin
sumber
1
Tidak perlu menggunakan if (IsSectionDefined())kecuali Anda memberikan elseklausa. Fakta yang Anda katakan required: falsesudah memungkinkan bagian itu tidak didefinisikan, dan dalam hal itu bagian tersebut akan dihilangkan. Jadi ini bukan kode tambahan yang tidak perlu.
ErikE
0

Tampaknya Anda telah membuat jenis proyek 'Kosong' tanpa folder 'Skrip'. Saran saya - buat jenis proyek 'Dasar' dengan folder 'Skrip' lengkap.

Sehubungan dengan semua pengembang.

Kammer
sumber
0

cukup hapus / sembunyikan kode dari buat & Edit tampilan pisau cukur controller Anda.

 @section Scripts {  

   @Scripts.Render("~/bundles/jqueryval")  
 }  
atik sarker
sumber
0
  1. : hapus halaman tampilan.
  2. : tambahkan namespace webconfig (dalam direktori tampilan)
  3. : buat tampilan coba!

semoga berhasil...

Esat
sumber
0

Satu lagi untuk pot - menghabiskan waktu mencoba menyelesaikan masalah yang sama - meskipun telah didefinisikan di web.config untuk root dan root dari Views. Ternyata saya keliru menambahkannya ke <system.web><pages><namespaces>, dan tidak<system.web**.webPages.razor**><pages><namespaces> .

Sangat mudah untuk dilewatkan!

PoorbandTony
sumber
0

Ketika saya masuk pada halaman yang memiliki kode ini:

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

Kesalahan ini terjadi: Kesalahan. Kesalahan terjadi saat memproses permintaan Anda.

Dan pengecualian ini dicatat di log saya:

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

Saya telah mencoba semua tip pada halaman ini dan tidak ada satupun yang bisa saya selesaikan. Jadi saya telah melihat pada folder Paket saya dan memperhatikan bahwa saya memiliki dua versi untuk System.Web.Optmization.dll:

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

Proyek saya merujuk ke versi beta yang lebih lama. Saya hanya mengubah referensi ke versi yang lebih baru (69KB) dan semuanya berjalan dengan baik.

Saya pikir itu mungkin membantu seseorang.

rkawano
sumber
0

Itu memiliki solusi yang jelas. Saya punya masalah yang sama nanti. Tidak terkait dengan Referensi Majelis atau .... Ini akan terjadi dalam panggilan hierarki tampilan MVC Parsial, ketika Anda memiliki struktur halaman yang rumit. Jadi memanggil / merender setiap bagian secara terpisah pada setiap halaman (mungkin halaman master atau sebagian) akan menyebabkan tidak melihat bagian-bagian halaman yang diperlukan seperti kode di bawah:

@RenderSection("Scripts", required: false)

Itu hanya memaksa halaman untuk menemukan dan merender bagian terkait dan jika terjadi kegagalan menunjukkan pesan kesalahan seperti Anda.

Jadi saya sarankan Anda untuk melacak halaman Anda (seperti pelacakan program) dari master ke semua parsial untuk Mendeteksi Ketergantungan . Mungkin ini pekerjaan yang mengerikan, tetapi tidak ada pilihan lain yang tersedia di sini.

Bukannya menurut pengalaman saya, beberapa situasi bersyarat dalam pemrograman menyebabkan tidak menunjukkan kepada Anda kesalahan yang tepat menyebabkan masalah.

Amirhossein Mehrvarzi
sumber
0

Saya mengalami masalah ini setelah saya menambahkan Area ke proyek yang tidak memilikinya. Untuk menghilangkannya cukup salin folder web.config withing Views ke folder Views area dan mulai berfungsi.

Stefano.net
sumber
0

Saya mengatasi masalah ini di MvcMusicStore dengan menambahkan bagian kode ini di _Layout.cshtml

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

dan hapus kode ini dari Edit.cshtml

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

Jalankan program insya Allah akan bekerja dengan Anda.

احمد الباكري
sumber
0

Bagi saya ini menyelesaikan masalah, dalam konsol manajer paket NuGet menulis berikut:

update-package microsoft.aspnet.mvc -reinstall
Adam
sumber
0

Ketika saya mulai menggunakan MVC4 baru-baru ini saya menghadapi masalah di atas sambil membuat proyek dengan template kosong. Langkah-langkah untuk memperbaiki masalah ini.

  1. Goto TOOLS-> Library Package Manager-> Packager Manager Console Tempel perintah di bawah ini dan tekan enter Install-Package Microsoft.AspNet.Web.Optimization Catatan: tunggu instalasi berhasil.
  2. Goto Web.Config file di tingkat root dan tambahkan namespace di bawah di bagian namespace halaman. Menambahkan<namespace="System.Web.Optimization" />
  3. Goto Web.Config di folder Views dan ikuti langkah 2.
  4. Bangun solusi dan jalankan.

Paket yang disebutkan pada langkah 1 akan menambahkan beberapa pustaka sistem ke dalam referensi solusi seperti System.Web.Optimisasi bukan referensi default untuk template kosong di MVC4.

Saya harap ini membantu. Terima kasih

Radha G
sumber
0

Saya memiliki kesalahan yang sangat mirip ketika memutakhirkan proyek dari MVC3 ke MVC4.

Pesan Kesalahan Kompiler: CS0103: Nama [bla] tidak ada dalam konteks saat ini

Dalam kasus saya, saya sudah ketinggalan zaman nomor versi di beberapa Web.Configs saya.

  1. Saya perlu memperbarui nomor versi System.Web.Mvc dari "3.0.0.0" ke "4.0.0.0" di setiap Web.Config dalam proyek saya.
  2. Saya perlu memperbarui semua System.Web.WebPages, System.Web.Helpers, dan System.Web.Relor nomor versi saya dari "1.0.0.0" menjadi "2.0.0.0" di setiap Web.Config di proyek saya.

Ex:

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

Pastikan untuk meninjau Web.Configs di masing-masing direktori Views Anda.

Anda dapat membaca lebih lanjut tentang Meningkatkan Proyek ASP.NET MVC 3 ke ASP.NET MVC 4 .

Mac
sumber
0

Jika Anda menambahkan ke web.config Anda dan masih menampilkan pesan, maka Anda harus menutup proyek Anda dan membukanya kembali, sekarang ia akan ada dan @ Styles.Render ("") dan @ Scripts.Render () akan berfungsi dengan baik.

Muhammad Shahid Khan Afridi
sumber
-1

Coba ini:

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