' yang memiliki kunci 'xxx''/> ' yang memiliki kunci 'xxx''/> ' yang memiliki kunci 'xxx''/> Tidak ada item ViewData tipe 'IEnumerable <SelectListItem>' yang memiliki kunci 'xxx' | gomecomputer.com

Pertanyaan Tidak ada item ViewData tipe 'IEnumerable ' yang memiliki kunci 'xxx'


Ada beberapa posting tentang ini di Stack Overflow tetapi tidak ada jawaban yang tampaknya memperbaiki masalah dalam situasi saya saat ini.

Saya memiliki halaman dengan tabel di dalamnya, setiap baris memiliki sejumlah bidang teks dan dropdown. Semua dropdown harus menggunakan data SelectList yang sama jadi saya telah mengaturnya sebagai berikut:

Kontroler

ViewData["Submarkets"] = new SelectList(submarketRep.AllOrdered(), "id", "name");

Melihat 

<%= Html.DropDownList("submarket_0", (SelectList)ViewData["Submarkets"], "(none)") %>

Saya telah menggunakan pengaturan ini di banyak tempat, tetapi untuk beberapa alasan dalam pandangan khusus ini saya mendapatkan kesalahan:

Tidak ada item ViewData tipe 'IEnumerable' yang memiliki kunci 'submarket_0'.


75
2018-05-17 13:22


asal


Jawaban:


Ok, jadi jawabannya berasal dari beberapa posting lain tentang masalah ini dan itu adalah:

Jika Anda ViewData mengandung a SelectList dengan nama yang sama dengan Anda DropDownList yaitu "submarket_0", helper Html akan secara otomatis mengisi Anda DropDownList dengan data itu jika Anda tidak menentukan parameter ke-2 yang dalam hal ini adalah sumber SelectList.

Apa yang terjadi dengan kesalahan saya adalah:

Karena tabel yang berisi daftar drop down berada di tampilan parsial dan ViewData telah diubah dan tidak lagi berisi SelectList Saya telah direferensikan, yang HtmlHelper (bukannya melemparkan kesalahan) mencoba untuk menemukan SelectList disebut "submarket_0" di ViewData (GRRRR !!!) yang MASIH itu tidak bisa menemukan, dan kemudian melemparkan kesalahan pada itu :)

Tolong benarkan saya jika saya salah


67
2018-05-17 14:08



Pertanyaan lama, tetapi inilah penjelasan lain dari masalah ini. Anda akan mendapatkan kesalahan ini bahkan jika Anda memiliki pandangan yang diketik kuat dan tidak menggunakan ViewData untuk membuat daftar tarik-turun Anda. Alasan kesalahan bisa menjadi jelas ketika Anda melihat Sumber MVC:

// If we got a null selectList, try to use ViewData to get the list of items.
if (selectList == null)
{
    selectList = htmlHelper.GetSelectData(name);
    usedViewData = true;
}

Jadi jika Anda memiliki sesuatu seperti:

@Html.DropDownList("MyList", Model.DropDownData, "")

Dan Model.DropDownData adalah null, MVC melihat melalui ViewData Anda untuk sesuatu yang bernama MyList dan melempar kesalahan jika tidak ada objek di ViewData dengan nama itu.


22
2017-10-11 20:10



Saya memiliki kesalahan yang sama, saya pikir masalahnya adalah itu teks kesalahan membingungkan, karena memberikan nama kunci yang salah.

Dalam kasus Anda Ini seharusnya mengatakan "Tidak ada item ViewData tipe 'IEnumerable' yang memiliki kunci" Subpasar "".

Kesalahan saya adalah kesalahan dalam kode tampilan ("Subpasar" Anda), tetapi teks kesalahan membuat saya menjadi gila.

Saya memposting jawaban ini karena saya ingin mengatakan orang-orang mencari kesalahan ini, seperti saya, bahwa masalahnya adalah itu tidak menemukan yang IENumerable, tetapi di var yang seharusnya mencari itu ("Subpasar" dalam kasus ini), tidak dalam yang menunjukkan kesalahan ("submarket_0").

Jawaban yang diterima sangat menarik, tetapi seperti yang Anda katakan konvensi ini diterapkan jika Anda tidak menentukan parameter ke-2, dalam hal ini ditentukan, tetapi var tidak ditemukan (dalam kasus Anda karena tampilan data tidak, dalam kasus saya karena Saya salah mengeja nama var)

Semoga ini membantu!


14
2017-10-28 07:38



Masalahnya adalah karena posting kembali terjadi pada klik tombol submit. Jadi saat memposting data pada klik kirim lagi tulis sebelum kembali Lihat ()

ViewData["Submarkets"] = new SelectList(submarketRep.AllOrdered(), "id", "name");

8
2017-09-05 07:29



Periksa Namespace.

Anda dapat menetapkan System.Web.Webpages.Html.SelectListItem di Controller, bukan System.Web.Mvc.SelectListItem.


3
2018-05-22 09:28



Ini juga oke; Sebagai contoh:
==> Dalam file "NumberController":

public ActionResult Create([Bind(Include = "NumberId,Number1,Number2,OperatorId")] Number number)
{
    if (ModelState.IsValid)
    {
        ...
        ...
        return RedirectToAction("Index");
    }
    ViewBag.OperatorId = new SelectList(db.Operators, "OperatorId", 
                                "OperatorSign", number.OperatorId);                
    return View();
}

==> Dalam file View (Create.cshtml):

<div class="form-group">
    @Html.LabelFor(model => model.Number1, htmlAttributes: new { @class = 
                   "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.Number1, new { htmlAttributes = new { 
                        @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Number1, "", new { @class = 
                                   "text-danger" })
    </div>
</div>

Sekarang jika kita menghapus pernyataan ini:

ViewBag.OperatorId = new SelectList(db.Operators, "OperatorId", "OperatorSign", number.OperatorId);

dari belakang pernyataan berikut (di pengontrol kami):

return View();

kita akan melihat kesalahan ini:

Tidak ada item ViewData tipe 'IEnumerable' yang memiliki kunci 'OperatorId'.

* Jadi pastikan keberadaan pernyataan-pernyataan ini. *


0
2017-10-08 12:46



Bagi saya, masalah yang menyebabkan kesalahan ini muncul ketika saya menyimpan baris baru ke database, tetapi bidang itu nol. Dalam desain tabel database, bidang itu BUKAN NULL. Jadi ketika saya mencoba menyimpan baris baru dengan nilai nol untuk bidang tidak kosong, Visual Studio melemparkan kesalahan ini. Jadi, saya memastikan bahwa bidang itu diberi nilai, dan masalah itu diperbaiki.


0
2018-02-13 19:20



Dalam kasus saya ada konflik di ruang nama, saya punya:

using System.Web.Mvc;

dan

using System.Collections.Generic;

Saya secara eksplisit ingin menggunakan Mvc sehingga saya menyatakannya sebagai:

new System.Web.Mvc.SelectList(...)

-1
2018-03-10 15:55