Saya menggunakan AcceptVerbs
metode yang dirinci dalam posting blog Scott Gu's Preview 5 untuk menangani entri formulir di ASP.NET MVC:
- Pengguna mendapatkan formulir kosong melalui GET
- Pengguna memposting formulir yang telah diisi melalui POST ke Tindakan yang sama
- Tindakan memvalidasi data, mengambil tindakan yang sesuai, dan mengalihkan ke tampilan baru
Jadi saya tidak harus menggunakan TempData
. Karena itu, saya sekarang harus menambahkan langkah 'konfirmasi' ke proses ini, dan tampaknya memerlukan penggunaan TempData
.
Untuk beberapa alasan, saya enggan menggunakan TempData
- bahwa itu adalah sesuatu yang dirancang khusus.
Apakah ini masalah yang benar, atau saya mengada-ada?
asp.net-mvc
tempdata
anonim
sumber
sumber
Jawaban:
Saya menganggap data temp sebagai mekanisme api-dan-lupakan untuk memberi tahu pengguna. Sangat menyenangkan memberi mereka pengingat tentang sesuatu yang baru-baru ini mereka lakukan, tetapi saya juga ragu untuk menjadikannya langkah yang diperlukan dalam beberapa proses pengguna. Alasannya adalah jika mereka menyegarkan halaman, saya yakin halaman itu akan hilang. Saya rasa saya juga ragu untuk menggunakannya karena tidak begitu jelas seberapa dapat diandalkannya.
Saya ingin tahu apakah masalahnya adalah Anda memiliki tindakan yang dialihkan ke halaman lain sebelum langkah konfirmasi. Saya ingin tahu apakah setelah mereka mengirim pertama kali, Anda dapat melakukan cukup pemrosesan untuk menghasilkan dialog konfirmasi, lalu mengembalikan halaman asli dengan pertanyaan konfirmasi. Mirip dengan cara Anda melakukan validasi, kecuali aturan validasi memeriksa apakah langkah konfirmasi telah dilakukan (dengan UI konfirmasi disembunyikan hingga validasi lain lolos).
sumber
Tidak perlu enggan menggunakan TempData ... Tapi jika tidak digunakan dengan benar pasti bisa menjadi indikasi desain yang buruk. Jika Anda menggunakan RESTful URL's, TempData adalah praktik terbaik untuk mentransfer pesan dari Tindakan POST Anda ke Tindakan GET Anda. Pertimbangkan ini:
Anda memiliki formulir di URL Products / New. Formulir Posting ke Produk / Buat, yang memvalidasi formulir dan membuat Produk, Jika Berhasil, Pengontrol mengalihkan ke URL Produk / 1 dan saat terjadi kesalahan akan mengarahkan kembali ke produk / Baru untuk menampilkan Pesan Kesalahan.
Products / 1 hanyalah tindakan GET standar untuk produk, tetapi kami ingin pesan ditampilkan yang menunjukkan bahwa penyisipan berhasil. TempData sempurna untuk ini. Tambahkan pesan ke TempData di Post Controller dan masukkan logika if dalam tampilan dan selesai.
Jika gagal, saya telah menambahkan nilai yang dimasukkan di formCollection dan kumpulan Pesan kesalahan ke TempData di Tindakan Posting, dan mengalihkan ke Tindakan Prodcuts awal / Baru. Saya telah menambahkan logika ke tampilan untuk mengisi input formulir dengan nilai yang dimasukkan sebelumnya bersama dengan pesan kesalahan apa pun. Tampak bagus dan bersih bagiku!
sumber
Products/New
? Nilai apa yangProducts/Create
ditambahkan?Saya pikir Anda sebaiknya ragu sebelum menggunakan TempData. TempData disimpan dalam sesi dan ini mungkin berdampak bagi Anda jika:
Jika situs Anda perlu memiliki ketersediaan tinggi, maka ada pertimbangan tambahan seputar penerapan status sesi tetapi ini semua adalah masalah yang dapat dipecahkan.
sumber
Saya memiliki metode GetModel yang pertama kali memeriksa TempData ["model"] dan mengembalikannya. Jika tidak, GetModel memuat data yang sesuai dari database.
Ini menghemat beban ekstra dari database ketika saya memiliki tindakan yang perlu mengembalikan tampilan berbeda yang memerlukan data model yang sama.
sumber
Lihat pengontrol tanpa sesi sesi di MVC3. Ternyata, penggunaan sesi mencegah eksekusi paralel dari satu permintaan pengguna dan dengan demikian menyebabkan penurunan kinerja.
Karena tempdata menggunakan sesi secara default, Anda tidak akan dapat menggunakan fitur ini. Anda dapat beralih menggunakan cookie untuk tempdata, tetapi ini agak canggung (setidaknya untuk saya). Masih lebih bersih dari kondisi tampilan, jadi mungkin ini bukan masalah besar.
sumber
Mengapa Anda memiliki keengganan seperti itu? Hal ini hanya membuat tugasnya dan membuatnya baik :)
Jika Anda tidak menyukainya karena tidak diketik dengan kuat, Anda selalu dapat membuat pembungkus yang akan memberi Anda antarmuka yang diketik dengan kuat.
sumber
Ini seperti menggunakan ViewData, artinya ini mungkin bukan risiko keamanan. Tetapi saya lebih suka menggunakan ViewData daripada TempData. Lihat di sini untuk perbandingan: http://www.squaredroot.com/2007/12/20/mvc-viewdata-vs-tempdata/
Bergantung pada desainnya, Anda selalu dapat menyimpan pengguna / keranjang atau apa pun yang Anda butuhkan dalam tempdata dalam database dan hanya memiliki bidang "IsReady" yang menunjukkan apakah sudah selesai atau belum, membuatnya dapat diperpanjang untuk nanti jika Anda ingin menerimanya ingat, bahwa orang dapat menutup browser mereka.
sumber
Semua jawaban yang bagus, pernahkah Anda melihat ini untuk menyampaikan pesan.
TempData dan Session bukanlah ide terbaik untuk arsitektur RESTful karena sebagian besar sesi disimpan dalam memori. Jadi ketika Anda ingin menggunakan server farm, sesi pengguna akan ada di satu server sementara permintaan mereka berikutnya dapat dikirim ke server lain.
Yang sedang berkata, lihat penggunaan TempData ini untuk menyampaikan pesan di sini.
http://jameschambers.com/2014/06/day-14-bootstrap-alerts-and-mvc-framework-tempdata/
Mungkin ini dapat diadaptasi untuk menggunakan pendekatan string kueri jika digunakan hanya untuk mengarahkan ke peringatan halaman lain.
sumber