Saya memiliki model dengan file gambar array byte yang ingin saya tampilkan di halaman.
Bagaimana saya bisa melakukannya tanpa kembali ke Database?
Semua solusi yang saya lihat menggunakan ActionResult
untuk kembali ke database untuk mengambil gambar, tetapi saya sudah memiliki gambar pada model ...
c#
asp.net-mvc
razor
DK ALT
sumber
sumber
Jawaban:
Sesuatu seperti ini mungkin berhasil ...
Seperti yang disebutkan dalam komentar di bawah, harap gunakan yang di atas dipersenjatai dengan pengetahuan bahwa meskipun ini dapat menjawab pertanyaan Anda, itu mungkin tidak menyelesaikan masalah Anda . Bergantung pada masalah Anda, ini mungkin solusinya tetapi saya tidak akan sepenuhnya mengesampingkan mengakses database dua kali.
sumber
:)
Ini berhasil untuk saya
sumber
Saya merekomendasikan sesuatu di sepanjang garis ini, bahkan jika gambar berada di dalam model Anda.
Saya menyadari Anda meminta cara langsung untuk mengaksesnya langsung dari tampilan dan banyak orang lain telah menjawabnya dan memberi tahu Anda apa yang salah dengan pendekatan itu jadi ini hanyalah cara lain yang akan memuat gambar secara asinkron untuk Anda dan saya pikir adalah pendekatan yang lebih baik.
Model Sampel:
Metode Sampel di Pengontrol:
Melihat
sumber
Salah satu caranya adalah dengan menambahkan ini ke kelas c # baru atau kelas HtmlExtensions
lalu Anda dapat melakukan ini dalam tampilan apa pun
sumber
Jika Anda dapat menyandikan basis 64 byte Anda, Anda dapat mencoba menggunakan hasilnya sebagai sumber gambar Anda. Dalam model Anda, Anda dapat menambahkan sesuatu seperti:
Dan menurut pandangan Anda:
sumber
Jika gambarnya tidak terlalu besar, dan jika ada kemungkinan besar Anda akan sering menggunakan kembali gambar itu, dan jika Anda tidak memiliki terlalu banyak gambar, dan jika gambarnya tidak rahasia (artinya tidak besar. kesepakatan jika satu pengguna berpotensi melihat gambar orang lain) ...
Banyak "jika" ada di sini, jadi kemungkinan besar ini adalah ide yang buruk:
Anda dapat menyimpan byte gambar
Cache
untuk waktu yang singkat, dan membuat tag gambar mengarah ke metode tindakan, yang pada gilirannya membaca dari cache dan mengeluarkan gambar Anda. Ini akan memungkinkan browser untuk menyimpan gambar dengan benar.Ini memiliki manfaat tambahan (atau apakah itu kruk?) Untuk bekerja di browser lama, di mana gambar sebaris tidak berfungsi di IE7 (atau IE8 jika lebih besar dari 32kB).
sumber
Ini adalah versi modifikasi dari jawaban Manoj yang saya gunakan dalam sebuah proyek. Baru saja diperbarui untuk mengambil kelas, atribut html, dan menggunakan TagBuilder.
Yang dapat digunakan kemudian sebagai berikut:
sumber
Anda harus memiliki byte [] di DB Anda.
Byte [] saya ada di objek Person:
Anda perlu mengonversi byte Anda [] menjadi String. Jadi, saya ada di pengontrol saya:
Selanjutnya, dalam file .cshtml saya, Model saya adalah ViewModel. Inilah yang saya miliki:
Saya menggunakannya seperti ini di file .cshtml saya:
"data: ekstensi file gambar / gambar ; base64, {0}, String gambar Anda "
Saya berharap ini akan membantu seseorang!
sumber
Jika Anda ingin menampilkan gambar, tambahkan metode sebagai kelas pembantu atau model itu sendiri dan izinkan metode untuk mengonversi gambar array byte ke format gambar seperti PNG atau JPG, lalu ubah ke string Base64. Setelah Anda memilikinya, ikat nilai base64 pada tampilan Anda dalam format
"data: image / [ekstensi jenis file gambar] ; base64, [string base64 Anda ditempatkan di sini] "
Di atas ditetapkan ke atribut
img
tagsrc
.Satu-satunya masalah yang saya miliki dengan ini adalah string base64 yang terlalu panjang. Jadi, saya tidak akan merekomendasikannya untuk beberapa model yang ditampilkan dalam satu tampilan.
sumber
Saya telah membuat metode helper berdasarkan asnwer di bawah ini dan saya cukup senang bahwa helper ini dapat membantu sebanyak mungkin.
Dengan model:
Pembantu adalah:
Tampilan menerima: objek ICollection jadi Anda perlu menggunakannya dalam tampilan di pernyataan foreach:
sumber