Saya membuat selectList di controller saya, untuk ditampilkan dalam tampilan.
Saya mencoba membuatnya dengan cepat, agak .. seperti ini ...
myViewData.PageOptionsDropDown =
new SelectList(new [] {"10", "15", "25", "50", "100", "1000"}, "15");
Mengkompilasi, tetapi hasilnya buruk ...
<select id="PageOptionsDropDown" name="PageOptionsDropDown">
<option>10</option>
<option>15</option>
<option>25</option>
<option>50</option>
<option>100</option>
<option>1000</option>
</select>
Perhatikan bagaimana tidak ada item yang dipilih?
Bagaimana saya bisa memperbaikinya ??
c#
asp.net-mvc
selectlist
Murni
sumber
sumber
Jawaban:
Beginilah cara saya melakukannya
Sekilas saya tidak yakin saya tahu apa yang Anda cari ...
sumber
SelectList sList = new SelectList(selectList, "Text", "Value", selected);
manaselected
pelanggan yang dipilih saat iniSaya menggunakan metode ekstensi:
pemakaian
dengan
sumber
Menggunakan konstruktor yang menerima
items, dataValueField, dataTextField, selectedValue
sebagai parameter:Lalu menurut Anda:
sumber
Membangun jawaban Thomas Stock, saya menciptakan
ToSelectList
metode kelebihan ini :Di controller Anda, Anda dapat melakukan hal berikut:
Dan akhirnya di View Anda, masukkan:
Ini akan menghasilkan output yang diinginkan - tentu saja, Anda dapat meninggalkan
"(Select one)"
optionLabel di atas jika Anda tidak ingin item kosong pertama:Pembaruan: Daftar kode yang direvisi dapat ditemukan di sini dengan komentar XML.
sumber
Masalahnya adalah, SelectList berfungsi seperti yang dirancang. Bug ada dalam desain. Anda dapat mengatur Properti Terpilih di SelectedItem, tetapi ini akan sepenuhnya diabaikan, jika Anda melintasi daftar dengan GetEnumerator () (atau jika Mvc melakukannya untuk Anda). Mvc akan membuat SelectListItems baru sebagai gantinya.
Anda harus menggunakan ctor SelectList dengan SelectListItem [], Teks-Nama, Nama-Nilai dan SelectedValue. Berhati-hatilah untuk lulus sebagai SelectedValue VALUE dari SelectListItem, yang ingin Anda pilih, bukan SelectListItem itu sendiri! Contoh:
(tidak diuji ini, tapi saya punya masalah yang sama)
maka opsi ke-2 akan mendapatkan atribut yang dipilih = "terpilih". Itu tampak seperti DataSets lama yang bagus ;-)
sumber
Ini sebuah opsi:
sumber
Jika hanya itu yang ingin Anda lakukan, cukup deklarasikan array sebagai string yang memperbaiki masalah item yang dipilih:
sumber
Sangat mudah untuk membuat SelectList dan SelectedValue bekerja bersama, bahkan jika properti Anda bukan objek sederhana seperti Int, String, atau nilai Double.
Contoh:
Dengan asumsi objek Wilayah kami adalah sesuatu seperti ini:
Dan model tampilan Anda adalah seperti:
Anda dapat memiliki kode di bawah ini:
Hanya jika Anda mengganti metode ToString objek Region ke sesuatu seperti:
Ini memiliki jaminan 100% untuk bekerja.
Tapi saya benar-benar percaya cara terbaik untuk membuat SelectList 100% berfungsi di semua keadaan adalah dengan menggunakan metode Equals untuk menguji nilai properti DropDownList atau ListBox terhadap setiap item pada koleksi item.
sumber
Tampaknya jika Anda memiliki tampilan yang sangat diketik, Anda perlu mengubah ID dropdown sehingga BUKAN nama properti pada kelas yang diwarisi. Anda kemudian perlu memasukkan beberapa logika dalam metode edit (POST) Anda untuk menarik nilai yang dipilih dari FORMCollection dan menaruhnya di instance Anda sebelum melakukan perubahan Anda.
Ini tentu agak aneh, tetapi saya mencobanya dan berhasil.
Jadi, jika kelas Anda memiliki bidang yang disebut CountryId katakan, dan Anda menampilkan daftar nama negara, buat dropdown memiliki id CountryName daripada CountryId, maka dalam posting, Anda dapat melakukan sesuatu dengan Collection ["CountryName"] .
sumber
Saya memiliki masalah yang sama persis. Solusinya sederhana. Cukup ubah parameter "nama" yang diteruskan ke bantuan DropDownList ke sesuatu yang tidak cocok dengan properti apa pun yang ada di ViewModel Anda. baca lebih lanjut di sini: http://www.dotnetguy.co.uk/post/2009/06/25/net-mvc-selectlists-selected-value-does-not-get-set-set-in-the-viewview
Saya mengutip Dan Watson:
Bersulang!
sumber
Semua jawaban ini tampak hebat, tetapi tampaknya bahwa pengontrol sedang mempersiapkan data untuk Tampilan dalam format terstruktur yang terkenal vs. membiarkan tampilan hanya mengulangi IEnumerable <> yang dikirimkan melalui model dan membangun daftar pilih standar kemudian biarkan DefaultModelBinder mengirimkan item yang dipilih kembali kepada Anda melalui parameter tindakan. Ya, tidak, mengapa tidak? Pemisahan masalah, ya? Tampaknya aneh memiliki controller untuk membangun sesuatu sehingga UI dan Lihat spesifik.
sumber
Sederhana:
sumber
Saya hanya menjalankannya seperti ini dan tidak punya masalah,
dan
itu juga berfungsi jika Anda melakukan ini,
dan
sumber
Menggunakan contoh Anda ini berhasil bagi saya:
pengontrol:
melihat:
sumber
sumber
Saya melakukannya seperti ini:
ToArray () menangani masalah.
sumber
Jika Anda ingin mengirimkan beberapa teks acak ke DropDownList Anda, misalnya - Pilih - Anda dapat dengan mudah melakukan ini menggunakan kode ini:
sumber
Mungkin Anda memiliki beberapa ambiguitas dalam ViewData Anda:
Lihatlah di sini
sumber
nilai yang dipilih dalam model mengambil keuntungan alih-alih item default. (Saya setuju saya tidak membaca semua posting)
sumber
Saya tidak ingat bagaimana pengaturan mvc 1, tetapi tampaknya ia ingin daftar pilih bernama sama dengan bidang miliknya juga ...
Apa yang saya temukan, seperti yang dikatakan seseorang di atas, adalah bahwa daftar pilih saya tidak berfungsi di mvc2 ketika ViewData yang mereka kirim sama dengan bidang yang sama.
Sebagai contoh:
<%= Html.DropDownListFor((model => model.ForID), (SelectList)ViewData["ForName"]) %>
bekerja kapan
<%= Html.DropDownListFor((model => model.ForID), (SelectList)ViewData["ForID"]) %>
tidak berfungsi karena nama ViewData "ForID" dinamai sama dengan bidang tempat ia bekerja
sumber
Penjelasan yang mungkin adalah bahwa nilai daftar pilih yang Anda ikat bukan string.
Jadi dalam contoh itu, apakah parameter 'PageOptionsDropDown' adalah string dalam model Anda? Karena jika tidak maka nilai yang dipilih dalam daftar tidak akan ditampilkan.
sumber
Jika Anda melihat dalam kode sumber untuk MVC 2 di metode ekstensi Html.DropDownList, itu tidak pernah memeriksa properti SelectList kelas SelectedValue. Itu hanya akan mencoba untuk mencocokkan dengan Model Anda.
Semua yang di atas adalah semua variasi pada tema, yaitu bagaimana Anda mengirim banyak data ke tampilan untuk daftar drop-down & mereka semua sama baiknya satu sama lain (lebih atau kurang).
Masalahnya ada di tampilan. Baik buat metode ekstensi DropDownList Anda sendiri yang menghargai nilai pilih yang Anda atur, atau lakukan iterasi dengan tangan. Mana yang paling cocok untuk Anda.
sumber
Jika Anda memiliki koleksi dalam model Anda dan Tampilan Anda sangat diketik, beberapa variasi ini akan berfungsi:
-atau-
sumber