Rumah >pembangunan bahagian belakang >C++ >Kenapa dropdownlists saya membuang 'item viewdata dengan kunci 'xxx' adalah jenis 'sistem.int32' tetapi mesti jenis 'ienumerable''?

Kenapa dropdownlists saya membuang 'item viewdata dengan kunci 'xxx' adalah jenis 'sistem.int32' tetapi mesti jenis 'ienumerable''?

Barbara Streisand
Barbara Streisandasal
2025-02-03 03:11:10258semak imbas

Why Does My DropDownListFor Throw

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: ketidakcocokan berlaku kerana penyerahan borang memberikan nilai integer tunggal (ID yang dipilih), tetapi penolong memerlukan koleksi untuk mengisi pilihan dropdown.

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,

hanya akan mengandungi ID integer yang dipilih, menyebabkan kesilapan.
<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:
    secara kritis, repopulate
  • dalam kaedah tindakan anda. Sekiranya pengesahan gagal, tidak akan ditarik balik secara automatik, yang membawa kepada ralat pada render berikutnya. CategoryList HttpPost CategoryList Sumber data: Gantikan
  • dengan sumber data sebenar anda untuk kategori. Pastikan sifat
  • dan sepadan dengan skema pangkalan data anda. db.Categories ID Kuat menaip: Name Menggunakan
  • lebih disukai untuk menaip kuat dan kejelasan kod yang lebih baik berbanding dengan generik
  • . 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn