Saya memiliki pengontrol MVC yang memiliki Metode Tindakan ini:
[HttpPost]
public ActionResult SubmitAction()
{
// Get Post Params Here
... return something ...
}
Formulir tersebut merupakan formulir non-sepele dengan kotak teks sederhana.
Pertanyaan
Bagaimana saya mengakses nilai parameter?
Saya tidak memposting dari View, postingan datang dari luar. Saya berasumsi bahwa ada kumpulan pasangan kunci / nilai yang dapat saya akses.
Saya mencoba Request.Params.Get("simpleTextBox");
tetapi mengembalikan kesalahan "Maaf, terjadi kesalahan saat memproses permintaan Anda.".
asp.net
asp.net-mvc-3
http-post
Richard
sumber
sumber
Sederhananya, Anda dapat menggunakan
FormCollection
seperti:Anda juga dapat menggunakan kelas, yang dipetakan dengan nilai Formulir, dan mesin mvc asp.net secara otomatis mengisinya:
sumber
Jawabannya sangat bagus tetapi ada cara lain dalam rilis terbaru MVC dan .NET yang sangat saya suka gunakan, daripada menggunakan kunci FormCollection dan Request "jadul".
Pertimbangkan potongan HTML yang terdapat dalam tag formulir yang melakukan AJAX atau FORM POST.
Kontroler Anda akan benar-benar mengurai data formulir dan mencoba mengirimkannya kepada Anda sebagai parameter dari tipe yang ditentukan. Saya menyertakan kotak centang karena ini rumit. Ia mengembalikan teks "on" jika dicentang dan null jika tidak dicentang. Namun persyaratannya adalah bahwa variabel yang ditentukan ini HARUS ada (kecuali nullable (ingat meskipun itu
string
nullable)) jika tidak AJAX atau POST back akan gagal.Anda juga dapat memposting kembali model tanpa menggunakan pisau cukur. Saya telah menemukan bahwa ini diperlukan beberapa kali.
Markup HTML hanya akan ...
dan controller Anda (Razor Engine) akan mencegat Variabel Formulir "variableName" (nama sesuka Anda tetapi tetap konsisten) dan mencoba membangunnya dan memasukkannya ke MyModel.
Ketika controller mengharapkan sebuah Model (dalam hal ini HomeModel) Anda tidak perlu mendefinisikan SEMUA field karena parser akan membiarkannya di default, biasanya NULL. Hal yang menyenangkan adalah Anda dapat mencampur dan mencocokkan berbagai model di Mark-up dan parse posting kembali akan terisi sebanyak mungkin. Anda tidak perlu menentukan model di halaman atau menggunakan pembantu apa pun.
Penggunaannya
List<>
sedikit lebih rumit dalam mark-upnya.Indeks pada Daftar <> HARUS selalu berbasis nol dan berurutan. 0,1,2,3.
Menggunakan
IEnumerable<>
untuk indeks berbasis non-nol dan non-sekuensial memposting kembali. Kami perlu menambahkan masukan tersembunyi ekstra untuk membantu pengikat.Dan kodenya hanya perlu menggunakan IEnumerable dan memanggil
ToList()
Disarankan untuk menggunakan Model tunggal atau ViewModel (Model yang mengekang model lain untuk membuat Model 'Tampilan' yang kompleks) per halaman. Mencampur dan mencocokkan seperti yang diusulkan dapat dianggap praktik yang buruk, tetapi selama berhasil dan dapat dibaca tidak BURUK. Bagaimanapun, itu menunjukkan kekuatan dan fleksibilitas mesin Razor.
Jadi jika Anda perlu memasukkan sesuatu yang sewenang-wenang atau mengganti nilai lain dari helper Razor, atau tidak ingin membuat pembantu Anda sendiri, untuk satu formulir yang menggunakan beberapa kombinasi data yang tidak biasa, Anda dapat dengan cepat menggunakan metode ini untuk menerima tambahan data.
sumber
Jika Anda ingin mendapatkan data formulir langsung dari permintaan Http, tanpa ikatan model apa pun atau
FormCollection
Anda dapat menggunakan ini:sumber
Request
dan menyuntikkannya ke metode.