MVC3 DropDownListFor - contoh sederhana?

112

Saya mengalami masalah dengan DropDownListFordi aplikasi MVC3 saya. Saya dapat menggunakan StackOverflow untuk mencari cara agar mereka muncul di Tampilan, tetapi sekarang saya tidak tahu cara menangkap nilai dalam properti yang sesuai pada Model Tampilan saat dikirimkan. Agar ini berfungsi, saya harus membuat kelas dalam yang memiliki ID dan properti nilai, lalu saya harus menggunakan an IEnumerable<Contrib>untuk memenuhi DropDownListForpersyaratan parameter. Sekarang, bagaimanapun, bagaimana MVC FW seharusnya memetakan nilai yang dipilih pada drop-down ini kembali ke properti string sederhana pada model tampilan saya?

public class MyViewModelClass
{
    public class Contrib
    {
        public int ContribId { get; set; }
        public string Value { get; set; }
    }

    public IEnumerable<Contrib> ContribTypeOptions = 
        new List<Contrib>
        {
            new Contrib {ContribId = 0, Value = "Payroll Deduction"},
            new Contrib {ContribId = 1, Value = "Bill Me"}
        };

    [DisplayName("Contribution Type")]
    public string ContribType { get; set; }
}

Dalam View saya, saya menempatkan dropdown pada halaman seperti ini:

<div class="editor-label">
    @Html.LabelFor(m => m.ContribType)
</div>
<div class="editor-field">
    @Html.DropDownListFor(m => m.ContribTypeOptions.First().ContribId, 
             new SelectList(Model.ContribTypeOptions, "ContribId", "Value"))
</div>

Saat saya mengirimkan formulir, ContribTypeis (tentu saja) null.

Bagaimana cara yang benar untuk melakukan ini?

Trey Carroll
sumber

Jawaban:

166

Anda harus melakukan seperti ini:

@Html.DropDownListFor(m => m.ContribType, 
                new SelectList(Model.ContribTypeOptions, 
                               "ContribId", "Value"))

Dimana:

m => m.ContribType

adalah properti di mana nilai hasilnya akan.

Sergey Gavruk
sumber
2
TERIMA KASIH!!! Sergey, inilah yang telah saya cari selama berjam-jam.
Trey Carroll
Terima kasih :) atas jawaban Anda Apakah ada cara untuk menampilkan "- Pilih--" dari sini. ?
kbvishnu
1
@VeeKeyBee, Anda dapat menambahkan item baru ke daftar contribTypeOptions, misalnya new Contrib {ContribId = -1, Value = "Please Select"}dan itu akan ditampilkan dalam daftar dropdown. Dari yang Anda dapat memeriksa apakah ContribTypeini -1ini berarti bahwa pengguna tidak memilih nilai apapun
Sergey Gavruk
9
Anda dapat melakukan ini:@Html.DropDownListFor(m => m.ContribType, new SelectList(Model.ContribTypeOptions, "ContribId", "Value", Model.ContribTypeOptions.First().ContribId), "Select, please")
Sergey Gavruk
1
@Tokopedia Jawaban ini telah digunakan sebagai dupe pada beberapa pertanyaan terbaru tetapi membingungkan beberapa pengguna karena pernyataan tersebut Dan parameter terakhir dari konstruktor daftar Pilih adalah nilai yang dipilih - Parameter terakhir diabaikan oleh metode (yang secara internal membangun sendiri SelectList) . Ini adalah nilai properti ( ContribType) yang menentukan apa yang dipilih (begitulah cara kerja pengikatan model) dan kodenya seharusnya hanya @Html.DropDownListFor(m => m.ContribType, new SelectList(Model.ContribTypeOptions, "ContribId", "Value")Bisakah Anda mengedit jawaban menjadi benar.
7

Saya pikir ini akan membantu: Dalam Controller dapatkan item daftar dan nilai yang dipilih

public ActionResult Edit(int id)
{
    ItemsStore item = itemStoreRepository.FindById(id);
    ViewBag.CategoryId = new SelectList(categoryRepository.Query().Get(), 
                                        "Id", "Name",item.CategoryId);

    // ViewBag to pass values to View and SelectList
    //(get list of items,valuefield,textfield,selectedValue)

    return View(item);
}

dan di View

@Html.DropDownList("CategoryId",String.Empty)
Praveen MP
sumber
5
Biasanya bukan pola dewa untuk mengekspos repositori Anda ke Tampilan seperti ini.
André Pena
6

Untuk mengikat Data Dinamis dalam DropDownList, Anda dapat melakukan hal berikut:

Buat ViewBag di Controller seperti di bawah ini

ViewBag.ContribTypeOptions = yourFunctionValue();

sekarang gunakan nilai ini dalam tampilan seperti di bawah ini:

@Html.DropDownListFor(m => m.ContribType, 
    new SelectList(@ViewBag.ContribTypeOptions, "ContribId", 
                   "Value", Model.ContribTypeOptions.First().ContribId), 
    "Select, please")
Dilip0165
sumber
0
     @Html.DropDownListFor(m => m.SelectedValue,Your List,"ID","Values")

Di sini Value adalah objek model tempat Anda ingin menyimpan Nilai yang Dipilih

Abdul Aleem
sumber