Beberapa browser menyimpan file js dan css, gagal menyegarkannya kecuali Anda memaksanya. Apa cara termudah.
Saya baru saja menerapkan solusi ini yang tampaknya berhasil.
Deklarasikan variabel versi di halaman Anda
public string version { get; set; }
Dapatkan nomor versi dari kunci web.config
version = ConfigurationManager.AppSettings["versionNumber"];
Di halaman aspx Anda, lakukan panggilan ke javascript dan stylesheet seperti itu
<script src="scripts/myjavascript.js?v=<%=version %>" type="text/javascript"></script>
<link href="styles/mystyle.css?v=<%=version %>" rel="stylesheet" type="text/css" />
Jadi jika Anda menyetel versi = 1.1 dari 1.0 di web.config Anda, browser Anda akan mengunduh file terbaru yang diharapkan akan menyelamatkan Anda dan pengguna Anda dari beberapa frustrasi.
Apakah ada solusi lain yang berfungsi lebih baik, atau apakah ini akan menyebabkan masalah tak terduga untuk situs web?
javascript
c#
asp.net
.net
asp.net-mvc
kiev
sumber
sumber
Jawaban:
Saya menyelesaikan ini dengan memasang stempel waktu terakhir yang dimodifikasi sebagai parameter kueri ke skrip.
Saya melakukan ini dengan metode ekstensi, dan menggunakannya dalam file CSHTML saya. Catatan: implementasi ini meng-cache stempel waktu selama 1 menit sehingga kami tidak terlalu banyak membuang-buang disk.
Berikut adalah metode ekstensi:
Lalu di halaman CSHTML:
Dalam HTML yang dirender, ini muncul sebagai:
sumber
Solusi Anda berhasil. Ini sebenarnya cukup populer.
Even Stack Overflow menggunakan metode serupa:
Di mana
v=6184
mungkin nomor revisi SVN.sumber
Di ASP.NET Core (MVC 6) ini berfungsi di luar kotak melalui
asp-append-version
tag helper:sumber
ASP.NET MVC akan menangani ini untuk Anda jika Anda menggunakan bundel untuk JS / CSS Anda. Ini akan secara otomatis menambahkan nomor versi dalam bentuk GUID ke bundel Anda dan hanya memperbarui GUID ini ketika bundel diperbarui (alias salah satu file sumber memiliki perubahan).
Ini juga membantu jika Anda memiliki banyak file JS / CSS karena dapat sangat meningkatkan waktu muat konten!
Lihat disini
sumber
Ada cara built-in di asp.net untuk ini: bundling . Gunakan saja. Setiap versi baru akan memiliki akhiran unik "? V = XXXXXXX". Dalam mode debug, bundling tidak aktif, untuk mengaktifkan pengaturan make di web.config:
Atau tambahkan ke metode RegisterBundles (bundle BundleCollection):
Sebagai contoh:
BundleConfig.cs:
_Layout.cshtml:
sumber
Ada jawaban yang lebih sederhana untuk ini daripada jawaban yang diberikan oleh op dalam pertanyaan (pendekatannya sama):
Tentukan kunci di web.config:
Lakukan panggilan ke pengaturan aplikasi langsung dari halaman aspx:
sumber
Berdasarkan jawaban Adam Tegan , dimodifikasi untuk digunakan dalam aplikasi formulir web.
Dalam kode kelas .cs:
Di markup aspx:
Dan di HTML yang dirender, itu muncul sebagai
sumber
Menariknya, situs ini memiliki masalah dengan pendekatan yang Anda jelaskan sehubungan dengan beberapa penyiapan proxy, meskipun seharusnya aman.
Periksa diskusi Meta Stack Overflow ini .
Jadi mengingat itu, mungkin masuk akal untuk tidak menggunakan parameter GET untuk memperbarui, tetapi nama file yang sebenarnya:
meskipun ini lebih banyak pekerjaan yang harus dilakukan, karena Anda harus benar-benar membuat file, atau membuat ulang URL untuk itu.
sumber
Saya ingin satu liner sederhana untuk membuat jalur unik untuk merusak cache. Ini berhasil untuk saya:
Jika file telah dimodifikasi sejak terakhir kali dimuat di halaman, browser akan menarik file yang diperbarui.
Ini menghasilkan
last modified
cap dari.js
file dan membuangnya di sana alih-alih versi yang mungkin tidak mudah untuk mendapatkan akses.Pilihan lain adalah mendapatkan checksum dari file tersebut.
sumber
Berikut adalah pendekatan yang berfungsi dengan ASP.NET 5 / MVC 6 / vNext .
Langkah 1: Buat kelas untuk mengembalikan waktu tulis terakhir file, mirip dengan jawaban lain di utas ini. Catatan, ini memerlukan injeksi ketergantungan ASP.NET 5 (atau lainnya).
Langkah 2: Daftarkan layanan yang akan diinjeksi di dalam startup.cs :
Langkah 3: Kemudian, di ASP.NET 5, dimungkinkan untuk menyuntikkan layanan langsung ke tampilan tata letak seperti _Layout.cshtml seperti ini:
Ada beberapa sentuhan akhir yang dapat dilakukan untuk menggabungkan jalur fisik dengan lebih baik dan menangani nama file dalam gaya yang lebih konsisten dengan sintaks, tetapi ini adalah titik awal. Semoga membantu orang-orang pindah ke ASP.NET 5.
sumber
Saya telah menggunakan teknik yang sedikit berbeda di situs aspnet MVC 4 saya:
_ViewStart.cshtml:
Kemudian dalam tampilan sebenarnya:
sumber
<?php $rand_no = rand(10000000, 99999999)?> <script src="scripts/myjavascript.js?v=<?=$rand_no"></script>
Ini berfungsi untuk saya di semua browser. Di sini saya telah menggunakan PHP untuk menghasilkan no acak. Anda dapat menggunakan bahasa sisi server Anda sendiri.`
sumber
Mulai dari jawaban di atas saya memodifikasi sedikit kode agar helper bekerja dengan file CSS juga dan menambahkan versi setiap kali Anda melakukan beberapa perubahan pada file dan tidak hanya ketika Anda melakukan build
sumber
Dapatkan waktu modifikasi file, seperti yang ditunjukkan di bawah ini
Tambahkan ini dengan masukan sebagai string kueri
Sebut ini dari markup.
Pendekatan Pembantu Ekstensi MVC
Tambahkan metode ekstensi
Tambahkan namespace ini di web.config
Gunakan dalam tampilan sebagai
sumber
Saran sebelumnya yang disederhanakan dan pemberian kode untuk pengembang Formulir Web .NET.
Ini akan menerima url relatif ("~ /") dan absolut di jalur file ke sumber daya.
Masukkan file kelas ekstensi statis, berikut ini:
Dan kemudian menyebutnya di Halaman Master Anda seperti itu:
sumber
Berdasarkan jawaban di atas, saya telah menulis kelas ekstensi kecil untuk bekerja dengan file CSS dan JS:
Dari pada menulis sesuatu seperti:
Anda sekarang dapat menulis:
Yaitu cukup ganti
Url.Content
denganUrl.VersionedContent
.URL yang dihasilkan terlihat seperti ini:
Jika Anda menggunakan kelas ekstensi, Anda mungkin ingin menambahkan penanganan kesalahan jika
MapPath
panggilan tidak berfungsi, karenacontentPath
bukan file fisik.sumber
Saya menggunakan cara serupa untuk melakukan hal yang sama yang Anda lakukan tanpa mengubah setiap halaman. Menambahkan acara PreRender adalah file master. Itu membuat logika saya di satu tempat dan berlaku untuk file js dan css.
sumber
Anda bisa mengganti properti DefaultTagFormat dari Scripts atau Styles.
sumber
Untuk mengatasi masalah ini di aplikasi ASP.Net Ajax saya, saya membuat ekstensi dan kemudian memanggil di halaman master.
Untuk lebih jelasnya bisa melalui link .
sumber
Cara mudah dan cerdas untuk mengimplementasikan versi css pada aplikasi .net dengan konsep di bawah ini .. tidak perlu menulis kode back-end.
sumber
Masalah utama dengan melakukannya dengan cara ini terutama adalah Anda harus ingat untuk memperbarui nomor versi Anda dalam kode Anda setiap kali Anda membuat perubahan pada file css atau js Anda.
Cara yang mungkin lebih baik untuk melakukannya adalah dengan menetapkan parameter unik yang dijamin dengan setiap file css atau js Anda, seperti:
Ini memaksa file untuk diminta dari server setiap saat, yang juga berarti bahwa situs Anda tidak akan berkinerja sebaik saat pemuatan halaman, karena file tersebut tidak akan pernah disimpan dalam cache, dan akan menggunakan bandwidth yang tidak diperlukan setiap saat.
Pada dasarnya, jika Anda ingat untuk memperbarui nomor versi setiap kali ada perubahan, Anda dapat memahami cara melakukannya.
sumber
Untuk halaman ASP.NET saya menggunakan berikut ini
SEBELUM
SETELAH (isi ulang paksa)
Menambahkan DateTime.Now.Ticks bekerja dengan sangat baik.
sumber