Rumah >pembangunan bahagian belakang >C++ >Kenapa dropdownlists saya membuang 'item viewdata dengan kunci 'xxx' adalah jenis 'sistem.int32' tetapi mesti jenis 'ienumerable''?
asp.net mvc dropdownlistfor ralat: taipkan ketidakcocokan
Artikel ini menangani perkara biasa yang ditemui semasa menggunakan InvalidOperationException
dalam ASP.NET MVC: DropDownListFor
"The ViewData item that has the key 'XXX' is of type 'System.Int32' but must be of type 'IEnumerable'."
Masalah:
Kesalahan ini timbul apabila harta model anda (mis.,) terikat kepada penolong XXX
adalah integer (DropDownListFor
) dan bukannya koleksi (int
atau serupa). Pembantu IEnumerable<SelectListItem>
mengharapkan koleksi item yang boleh dipilih, bukan satu nilai integer tunggal yang mewakili item yang dipilih. DropDownListFor
Punca:
Contoh senario:
katakan anda mempunyai model dengan harta untuk ID kategori:
int
dan paparan menggunakan
<code class="language-csharp">public class ProjectVM { public int CategoryID { get; set; } }</code>
DropDownListFor
selepas penyerahan borang,
<code class="language-html">@Html.DropDownListFor(model => model.CategoryID, new SelectList(ViewBag.Categories, "ID", "Name"))</code>
CategoryID
Penyelesaian:
Penyelesaian ini melibatkan mengubah model anda untuk memasukkan harta yang memegang koleksi item yang boleh dipilih:
Kemudian, isi harta ini
dalam pengawal anda:<code class="language-csharp">public class ProjectVM { public int CategoryID { get; set; } public IEnumerable<SelectListItem> CategoryList { get; set; } }</code>
CategoryList
pandangan anda kemudian akan menggunakan:
<code class="language-csharp">public class HomeController : Controller { public ActionResult Create() { var model = new ProjectVM(); model.CategoryList = new SelectList(db.Categories, "ID", "Name"); // Assuming db is your database context return View(model); } [HttpPost] public ActionResult Create(ProjectVM model) { if (ModelState.IsValid) { // Save model to database } // Repopulate the CategoryList in case of validation errors model.CategoryList = new SelectList(db.Categories, "ID", "Name"); return View(model); } }</code>
Pertimbangan penting:
<code class="language-html">@Html.DropDownListFor(model => model.CategoryID, Model.CategoryList)</code>
Repopulasi pada pos:
CategoryList
HttpPost
CategoryList
Sumber data: db.Categories
ID
Kuat menaip: Name
Menggunakan IEnumerable<SelectListItem>
Dengan melaksanakan perubahan ini, anda menyediakan penolong IEnumerable
dengan pengumpulan item yang diperlukan, menyelesaikan kesilapan jenis yang tidak sepadan. Atas ialah kandungan terperinci Kenapa dropdownlists saya membuang 'item viewdata dengan kunci 'xxx' adalah jenis 'sistem.int32' tetapi mesti jenis 'ienumerable''?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!