Kepala halaman tata letak:
<head>
<link href="@Url.Content("~/Content/themes/base/Site.css")"
rel="stylesheet" type="text/css" />
</head>
Tampilan (AnotherView) dari kebutuhan aplikasi:
<link href="@Url.Content("~/Content/themes/base/AnotherPage.css")"
rel="stylesheet" type="text/css" />
dan AnotherView memiliki tampilan parsial (AnotherPartial) yang membutuhkan:
<link href="@Url.Content("~/Content/themes/base/AnotherPartial.css")"
rel="stylesheet" type="text/css" />
Pertanyaan: Bagaimana kita bisa menambahkan tautan file CSS ini ke tautan AnotherView dan AnotherPartial ke kepala Layout ?
RenderSection bukanlah ide yang baik karena AnotherPage dapat memiliki lebih dari satu Partials. Menambahkan semua CSS ke kepala tidak berguna karena akan berubah secara dinamis (tergantung pada halaman lain).
asp.net-mvc
asp.net-mvc-3
razor
Nuri YILMAZ
sumber
sumber
Jawaban:
Tata letak:
Melihat:
sumber
AddToHead
bagian itu dalam tampilan parsial tertanam diView
.Pembaruan : contoh dasar tersedia di https://github.com/speier/mvcassetshelper
Kami menggunakan implementasi berikut untuk menambahkan file JS dan CSS ke halaman tata letak.
Lihat atau PartialView:
Layout page:
Ekstensi HtmlHelper:
sumber
Insert
metode denganAdd
metode[ThreadStatic]
, atau, lebih disukai, disimpan diHttpContext.Items
.Sayangnya, ini tidak mungkin secara default untuk digunakan
section
seperti yang disarankan pengguna lain, karena asection
hanya tersedia untuk segerachild
aView
.Namun yang berhasil adalah menerapkan dan mendefinisikan ulang
section
dalam setiap tampilan , yang berarti:Dengan cara ini setiap pandangan dapat menerapkan bagian kepala, bukan hanya anak-anak langsung. Ini hanya berfungsi sebagian, terutama dengan banyak parsial masalah dimulai (seperti yang telah Anda sebutkan dalam pertanyaan Anda).
Jadi satu-satunya solusi nyata untuk masalah Anda adalah menggunakan
ViewBag
. Koleksi terbaik mungkin adalah kumpulan (daftar) terpisah untuk CSS dan skrip. Agar ini berfungsi, Anda perlu memastikan bahwa yangList
digunakan diinisialisasi sebelum pandangan dijalankan. Kemudian Anda dapat dapat melakukan hal-hal seperti ini di bagian atas setiap pandangan / parsial (tanpa peduli jikaScripts
atauStyles
nilai null:Di tata letak Anda kemudian dapat mengulangi koleksi dan menambahkan gaya berdasarkan nilai-nilai di
List
.Saya pikir itu jelek, tapi itu satu-satunya yang berhasil.
****** PEMBARUAN **** Karena mulai menjalankan tampilan bagian dalam terlebih dahulu dan mencari jalan keluar ke tata letak dan gaya CSS mengalir, mungkin masuk akal untuk membalik daftar gaya melalui
ViewBag.Styles.Reverse()
.Dengan cara ini, gaya paling luar ditambahkan terlebih dahulu, yang sejalan dengan cara kerja lembar gaya CSS.
sumber
Anda dapat menentukan bagian dengan metode RenderSection dalam tata letak.
Tata letak
Kemudian Anda dapat memasukkan file css Anda di area bagian dalam tampilan Anda kecuali tampilan sebagian .
Bagian bekerja dalam tampilan, tetapi tidak berfungsi dalam tampilan sebagian oleh desain .
Jika Anda benar-benar ingin menggunakan area bagian dalam tampilan sebagian, Anda dapat mengikuti artikel untuk mendefinisikan kembali metode RenderSection.
Pisau Cukur, Tata Letak Bersarang, dan Bagian yang Didefinisikan Ulang - Marcin On ASP.NET
sumber
Saya memiliki masalah yang sama, dan akhirnya menerapkan jawaban Kalman yang sangat baik dengan kode di bawah ini (tidak begitu rapi, tetapi bisa dibilang lebih mudah dikembangkan):
Proyek ini berisi metode AssignAllResources statis:
di halaman _layout
dan di sebagian dan tampilan
sumber
Saya mencoba menyelesaikan masalah ini.
Jawaban saya ada di sini.
"DynamicHeader" - http://dynamicheader.codeplex.com/ , https://nuget.org/packages/DynamicHeader
Misalnya, _Layout.cshtml adalah:
Dan, Anda dapat mendaftarkan file .js dan .css ke "DynamicHeader" di mana pun Anda inginkan.
Untuk exmaple, blok kode di AnotherPartial.cshtm adalah:
Kemudian, akhirnya menghasilkan HTML adalah:
sumber
Coba solusi out-of-the-box (ASP.NET MVC 4 atau lebih baru):
sumber
CS0103: The name 'BundleTable' does not exist in the current context
System.Web.Optimization
yaituSystem.Web.Optimization.BundleTable.Bundles.GetRegisteredBundles().First(b => b.Path == "~/bundles/css");
Bagi kita yang menggunakan ASP.NET MVC 4 - ini mungkin membantu.
Pertama, saya menambahkan kelas BundleConfig di folder App_Start.
Inilah kode saya yang saya gunakan untuk membuatnya:
Kedua, saya mendaftarkan kelas BundleConfig di file Global.asax:
Ketiga, saya menambahkan bantuan gaya ke file CSS saya:
Akhirnya saya menggunakan sintaks ini dalam Tampilan apa pun:
sumber
Berikut ini adalah plugin NuGet bernama Cassette , yang antara lain memberikan Anda kemampuan untuk mereferensikan skrip dan gaya secara parsial.
Meskipun ada sejumlah konfigurasi yang tersedia untuk plugin ini, yang membuatnya sangat fleksibel. Berikut ini cara paling mudah untuk merujuk file skrip atau file stylesheet:
Menurut dokumentasi :
sumber
Saya menulis pembungkus mudah yang memungkinkan Anda untuk mendaftar gaya dan skrip di setiap tampilan sebagian secara dinamis ke tag kepala.
Ini didasarkan pada jsakamoto DynamicHeader disiapkan, tetapi memiliki beberapa peningkatan kinerja & tweak.
Sangat mudah digunakan, dan serbaguna.
Penggunaan:
Anda dapat menemukan kode lengkap, penjelasan, dan contoh di dalamnya: Tambahkan Gaya & Skrip Secara Dinamis ke Tag Kepala
sumber