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.
<input type="hidden" name="TrackingID"
<input type="text" name="FirstName" id="firstnametext" />
<input type="checkbox" name="IsLegal" value="Do you accept terms and conditions?" />
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.
[HttpPost]
public ActionResult PostBack(int TrackingID, string FirstName, string IsLegal){
MyData.SaveRequest(TrackingID,FirstName, IsLegal == null ? false : true);
}
Anda juga dapat memposting kembali model tanpa menggunakan pisau cukur. Saya telah menemukan bahwa ini diperlukan beberapa kali.
public Class HomeModel
{
public int HouseNumber { get; set; }
public string StreetAddress { get; set; }
}
Markup HTML hanya akan ...
<input type="text" name="variableName.HouseNumber" id="whateverid" >
dan controller Anda (Razor Engine) akan mencegat Variabel Formulir "variableName" (nama sesuka Anda tetapi tetap konsisten) dan mencoba membangunnya dan memasukkannya ke MyModel.
[HttpPost]
public ActionResult PostBack(HomeModel variableName){
postBack.HouseNumber; //The value user entered
postBack.StreetAddress; //the default value of NULL.
}
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.
TIPS: Nama parameter dalam pengontrol adalah nama yang ditentukan dalam mark-up HTML "name =" bukan nama Model, tetapi nama variabel yang diharapkan di!
Penggunaannya List<>
sedikit lebih rumit dalam mark-upnya.
<input type="text" name="variableNameHere[0].HouseNumber" id="id" value="0">
<input type="text" name="variableNameHere[1].HouseNumber" id="whateverid-x" value="1">
<input type="text" name="variableNameHere[2].HouseNumber" value="2">
<input type="text" name="variableNameHere[3].HouseNumber" id="whateverid22" value="3">
Indeks pada Daftar <> HARUS selalu berbasis nol dan berurutan. 0,1,2,3.
[HttpPost]
public ActionResult PostBack(List<HomeModel> variableNameHere){
int counter = MyHomes.Count()
foreach(var home in MyHomes)
{ ... }
}
Menggunakan IEnumerable<>
untuk indeks berbasis non-nol dan non-sekuensial memposting kembali. Kami perlu menambahkan masukan tersembunyi ekstra untuk membantu pengikat.
<input type="hidden" name="variableNameHere.Index" value="278">
<input type="text" name="variableNameHere[278].HouseNumber" id="id" value="3">
<input type="hidden" name="variableNameHere.Index" value="99976">
<input type="text" name="variableNameHere[99976].HouseNumber" id="id3" value="4">
<input type="hidden" name="variableNameHere.Index" value="777">
<input type="text" name="variableNameHere[777].HouseNumber" id="id23" value="5">
Dan kodenya hanya perlu menggunakan IEnumerable dan memanggil ToList()
[HttpPost]
public ActionResult PostBack(IEnumerable<MyModel> variableNameHere){
int counter = variableNameHere.ToList().Count()
foreach(var home in variableNameHere)
{ ... }
}
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.