Rumah >pembangunan bahagian belakang >C++ >Kenapa penyerahan borang MVC ASP.NET saya membuang kesilapan jenis item 'ViewData: mengharapkan 'IEnumerable' tetapi diterima 'System.Int32'' ralat?
Apabila mengemukakan borang MVC ASP.NET, anda mungkin menghadapi ralat "item ViewData yang mempunyai 'kategoriID' kunci adalah 'sistem.int32' tetapi mestilah jenis 'ienumerable'." Ini biasanya berlaku apabila tindakan pengawal anda mengharapkan koleksi
objek untuk senarai dropdown, tetapi menerima satu integer tunggal.
SelectListItem
percanggahan timbul dari ketidakcocokan antara model pandangan dan jangkaan tindakan pengawal:
Property Model View Model
CategoryID
int
senarai dropdown dalam pandangan anda memerlukan IEnumerable<SelectListItem>
kaedah GET pengawal dengan betul memaparkan senarai dropdown, tetapi kaedah pos gagal untuk memulihkannya. dalam CategoryList
di mana int
dijangka, mengakibatkan ketidakcocokan jenis. ViewData
IEnumerable
Penyelesaian ini melibatkan repopulating harta
dalam tindakan pos pengawal. Ini memastikan data senarai dropdown tersedia walaupun selepas penyerahan borang.
CategoryList
<code class="language-csharp">public ActionResult Create(ProjectVM model) { if (!ModelState.IsValid) { // Repopulate the CategoryList model.CategoryList = new SelectList(db.Categories, "ID", "Name"); return View(model); } // ... save the model and redirect ... }</code>Memahami mekanisme:
Kaedah penolong
mengambil senarai pilih dari kamus menggunakan nama harta. Jika senarai itu batal, ia memeriksa entri DropDownListFor
dengan nama yang sama. Mencari ViewData
di mana ViewData
dijangka mencetuskan kesilapan. int
IEnumerable
Ralat ini menggariskan kepentingan menaip data yang konsisten antara model pandangan anda, pandangan, dan tindakan pengawal untuk penyerahan bentuk lancar. Perhatian yang teliti terhadap pengurusan jenis data menghalang perangkap MVC yang biasa ini.
Atas ialah kandungan terperinci Kenapa penyerahan borang MVC ASP.NET saya membuang kesilapan jenis item 'ViewData: mengharapkan 'IEnumerable' tetapi diterima 'System.Int32'' ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!