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
Lepaskan: 2025-02-03 03:11:10
asal
303 orang telah melayarinya

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

:
public class ProjectVM
{
    public int CategoryID { get; set; }
}
Salin selepas log masuk

DropDownListFor selepas penyerahan borang,

hanya akan mengandungi ID integer yang dipilih, menyebabkan kesilapan.
@Html.DropDownListFor(model => model.CategoryID, new SelectList(ViewBag.Categories, "ID", "Name"))
Salin selepas log masuk

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:
public class ProjectVM
{
    public int CategoryID { get; set; }
    public IEnumerable<SelectListItem> CategoryList { get; set; }
}
Salin selepas log masuk

CategoryList pandangan anda kemudian akan menggunakan:

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);
    }
}
Salin selepas log masuk

Pertimbangan penting:
@Html.DropDownListFor(model => model.CategoryID, Model.CategoryList)
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan