Saya ingin menyimpan semua kode JavaScript saya dalam satu bagian; sebelum penutupanbody
tag di halaman tata letak master saya dan hanya ingin tahu yang terbaik untuk melakukannya, gaya MVC.
Misalnya, jika saya membuat file DisplayTemplate\DateTime.cshtml
file yang menggunakan JQuery UI's DateTime Picker daripada saya akan menyematkan JavaScript langsung ke template itu tetapi kemudian akan merender di tengah halaman.
Dalam tampilan normal saya, saya hanya dapat menggunakan @section JavaScript { //js here }
dan kemudian @RenderSection("JavaScript", false)
dalam tata letak master saya tetapi ini tampaknya tidak berfungsi di template tampilan / editor - ada ide?
Jawaban:
Anda dapat melanjutkan dengan menggabungkan dua pembantu:
dan kemudian di
_Layout.cshtml
:dan di suatu tempat di beberapa template:
sumber
sections
. Dalam MVC4, Bundling memang bisa digunakan sekaligus membantu mengurangi ukuran skrip.head
tag alih-alih di akhirbody
tag, karena@Html.RenderScripts()
akan dijalankan sebelum tampilan parsial dan sebelumnya@Html.Script()
.Versi modifikasi dari jawaban Darwin untuk memastikan pemesanan. Juga bekerja dengan CSS:
Anda dapat menambahkan sumber daya JS dan CSS seperti ini:
Dan render sumber daya JS dan CSS seperti ini:
Anda dapat melakukan pemeriksaan string untuk melihat apakah itu dimulai dengan skrip / tautan sehingga Anda tidak harus secara eksplisit mendefinisikan apa itu setiap sumber daya.
sumber
Saya menghadapi masalah yang sama, tetapi solusi yang diusulkan di sini berfungsi dengan baik hanya untuk menambahkan referensi ke sumber daya dan tidak terlalu cocok untuk kode JS sebaris. Saya menemukan artikel yang sangat membantu dan membungkus semua inline JS saya (dan juga tag script)
Dan dalam tampilan _Layout ditempatkan
@Html.PageScripts()
tepat sebelum menutup tag 'body'. Bekerja seperti pesona bagi saya.Para pembantu itu sendiri:
sumber
Saya menyukai solusi yang diposting oleh @ john-w-harding, jadi saya menggabungkannya dengan jawaban oleh @ darin-dimitrov untuk membuat solusi yang mungkin terlalu rumit berikut yang memungkinkan Anda menunda rendering html (skrip juga) dalam blok penggunaan.
PEMAKAIAN
Dalam tampilan parsial berulang, hanya sertakan blok satu kali:
Dalam tampilan parsial (berulang?), Sertakan blok untuk setiap kali parsial digunakan:
Dalam tampilan parsial (berulang?), Sertakan blok satu kali, dan kemudian render secara spesifik dengan nama
one-time
:Untuk merender:
KODE
sumber
Instal paket nuget Forloop.HtmlHelpers - ini menambahkan beberapa pembantu untuk mengelola skrip dalam tampilan parsial dan template editor.
Di suatu tempat di tata letak Anda, Anda perlu menelepon
Ini akan menjadi tempat file skrip dan blok skrip akan dikeluarkan di halaman jadi saya akan merekomendasikan meletakkannya setelah skrip utama Anda dalam tata letak dan setelah bagian skrip (jika Anda memilikinya).
Jika Anda menggunakan The Web Optimization Framework dengan bundling, Anda dapat menggunakan kelebihan beban
Sehingga metode ini digunakan untuk menulis file script.
Sekarang, kapan pun Anda ingin menambahkan file atau blok skrip dalam tampilan, tampilan parsial, atau templat, cukup gunakan
Para pembantu memastikan bahwa hanya satu referensi file skrip yang dirender jika ditambahkan beberapa kali dan itu juga memastikan bahwa file skrip dirender dalam urutan yang diharapkan, yaitu
sumber
Posting ini sangat membantu saya jadi saya pikir saya akan memposting implementasi saya dari ide dasar. Saya telah memperkenalkan fungsi helper yang dapat mengembalikan tag skrip untuk digunakan dalam fungsi @ Html.Resource.
Saya juga menambahkan kelas statis sederhana sehingga saya dapat menggunakan variabel yang diketik untuk mengidentifikasi sumber daya JS atau CSS.
Dan sedang digunakan
Terima kasih kepada @Darin Dimitrov yang telah memberikan jawaban atas pertanyaan saya di sini .
sumber
Jawaban yang diberikan di Populate a Razor Section From a Partial menggunakan
RequireScript
HtmlHelper mengikuti pola yang sama. Manfaatnya juga karena ia memeriksa dan menyembunyikan referensi duplikat ke URL Javascript yang sama, dan memilikipriority
parameter eksplisit yang dapat digunakan untuk mengontrol pengurutan.Saya memperluas solusi ini dengan menambahkan metode untuk:
Saya suka solusi Darin's & eth0 karena mereka menggunakan
HelperResult
template, yang memungkinkan blok skrip dan CSS, bukan hanya tautan ke file Javascript dan CSS.sumber
@Darin Dimitrov dan @ eth0 jawaban untuk digunakan dengan penggunaan ekstensi bundel:
sumber