Saya memiliki dua tombol di formulir MVC saya:
<input name="submit" type="submit" id="submit" value="Save" />
<input name="process" type="submit" id="process" value="Process" />
Dari tindakan Kontroler saya, bagaimana saya tahu yang mana yang telah ditekan?
c#
asp.net
asp.net-mvc
razor
Coppermill
sumber
sumber
<input name="submit" type="submit" id="submit" value="Save" onclick="saveMethod" />
?Jawaban:
Beri nama kedua tombol kirim Anda sama
Kemudian di controller Anda dapatkan nilai submit. Hanya tombol yang diklik yang akan melewati nilainya.
Tentu saja Anda dapat menilai nilai itu untuk melakukan operasi yang berbeda dengan blok sakelar.
sumber
<button type="submit" name="action" value="draft"> Internationalized Save Text </button>
untuk tujuan i18n, sehingga string yang menghadap pengguna dapat disesuaikan, dan nama elemen bentuk tidak pernah langsung terpapar ke pengguna (yang aneh dengan sendirinya)Dan dalam aksi pengontrol Anda:
sumber
ini adalah jawaban yang lebih baik, sehingga kami dapat memiliki teks dan nilai untuk sebuah tombol:
http://weblogs.asp.net/dfindley/archive/2009/05/31/asp-net-mvc-multiple-buttons-in-the-same-form.aspx
dan pengontrol:
singkatnya itu adalah tombol PENGIRIM tetapi Anda memilih nama menggunakan atribut nama, itu bahkan lebih kuat karena Anda tidak berkewajiban untuk mengirimkan nama atau tombol dalam parameter metode pengontrol, Anda dapat memanggilnya sesuka Anda ...
sumber
Anda dapat mengidentifikasi tombol Anda dari sana tag nama seperti di bawah ini, Anda perlu memeriksa seperti ini di controller Anda
sumber
Berikut cara yang sangat bagus dan sederhana untuk melakukannya dengan sangat mudah untuk mengikuti instruksi menggunakan MultiButtonAttribute khusus:
http://blog.maartenballiauw.be/post/2009/11/26/Supporting-multiple-submit-buttons-on-an-ASPNET-MVC-view.aspx
Untuk meringkas, buat tombol kirim Anda seperti ini:
Tindakan Anda seperti ini:
Dan buat kelas ini:
sumber
MultiButtonAttribute
atribut khusus untuk memungkinkan membedakan antara tombol kirim. Sebenarnya ide yang cukup bagus.Arnis L.
mengikuti saran yang sama, Anda mungkin memperhatikan bahwa dia memberikan tautan yang sama persis 4 tahun sebelumnya:>sumber
Untuk membuatnya lebih mudah, saya akan mengatakan Anda dapat mengubah tombol Anda sebagai berikut:
Pengontrol Anda:
sumber
Posting ini tidak akan menjawab ke Coppermill, karena dia sudah dijawab lama. Posting saya akan sangat membantu bagi yang akan mencari solusi seperti ini. Pertama-tama, saya harus mengatakan "solusi WDuffy benar-benar benar" dan berfungsi dengan baik, tetapi solusi saya (tidak benar-benar milik saya) akan digunakan dalam elemen lain dan itu membuat lapisan presentasi lebih independen dari pengontrol (karena pengontrol Anda bergantung pada "nilai" yang digunakan untuk menampilkan label tombol, fitur ini penting untuk bahasa lain.).
Ini solusi saya, beri mereka nama yang berbeda:
Dan Anda harus menentukan nama tombol sebagai argumen dalam tindakan seperti di bawah ini:
ketika pengguna mengirimkan halaman menggunakan salah satu tombol, hanya salah satu argumen yang akan memiliki nilai. Saya kira ini akan bermanfaat bagi orang lain.
Memperbarui
Jawaban ini cukup lama dan saya benar-benar mempertimbangkan kembali pendapat saya. mungkin solusi di atas baik untuk situasi yang melewatkan parameter ke properti model. jangan repot-repot sendiri dan mengambil solusi terbaik untuk proyek Anda.
sumber
input[type=submit]
nilai yang dipicu, sehingga mereka semua dapat memodelkan mengikat ke properti dengan yang samaname
(mis.action
) Dan kemudian Anda dapat membedakan tombol berdasarkan padavalue
string itu tanpa perlu memperkenalkan banyak variabel dalam tanda tangan Anda . Harap juga luangkan waktu untuk memikirkan tentang pemformatan / indentasi sebelum memposting.Tidak bisakah Anda mencari tahu dengan menggunakan Request.Form Collection? Jika proses diklik, request.form ["proses"] tidak akan kosong
sumber
Beri nama untuk kedua tombol dan Dapatkan centang nilai dari formulir.
Di sisi pengontrol:
sumber
Di halaman Core 2.2 Razor, sintaks ini berfungsi:
sumber
string submit
vs tulisanstring submit = Request.Form["Submit"];
. Salah satu manfaat terbesar Razor Pages dan / atau MVC adalah keterbacaan metode, jika tidak bisa berupa PHP.