MVC3 DropDownListFor - basit bir örnek?


112

DropDownListForMVC3 uygulamamda sorun yaşıyorum . StackOverflow'u onları Görünümde nasıl görüneceklerini bulmak için kullanabildim, ancak şimdi gönderildiğinde Görünüm Modelinde karşılık gelen özelliklerdeki değerleri nasıl yakalayacağımı bilmiyorum. Bunun çalışmasını sağlamak için bir ID ve bir değer özelliğine sahip bir iç sınıf oluşturmalıydım, sonra parametre gereksinimlerini IEnumerable<Contrib>karşılamak için an kullanmalıydım DropDownListFor. Ancak şimdi, MVC FW'nin bu açılır menüde seçilen değeri görünüm modelimdeki basit dize özelliğine nasıl eşlemesi gerekiyor?

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; }
}

Görünümümde açılır listeyi sayfaya şu şekilde yerleştiriyorum:

<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>

Formu gönderdiğimde ContribType(elbette) boş.

Bunu yapmanın doğru yolu nedir?

Yanıtlar:


166

Bunu sevmelisin:

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

Nerede:

m => m.ContribType

sonuç değerinin olacağı bir özelliktir.


2
TEŞEKKÜR EDERİM!!! Sergey, bu tam olarak saatlerdir aradığım şey.
Trey Carroll

Cevabınız için teşekkürler :) Buradan "- Seç -" i göstermenin bir yolu var mı? ?
kbvishnu

1
@VeeKeyBee, contribTypeOptionsörneğin listeye yeni öğe ekleyebilirsiniz new Contrib {ContribId = -1, Value = "Please Select"}ve açılır listede görünecektir. Olmadığını kontrol edebileceğinden çok daha ContribTypeolduğu -1kullanıcının herhangi bir değer seçmediniz araçtır
Sergey Gavruk

9
Bunu yapabilirsiniz:@Html.DropDownListFor(m => m.ContribType, new SelectList(Model.ContribTypeOptions, "ContribId", "Value", Model.ContribTypeOptions.First().ContribId), "Select, please")
Sergey Gavruk

1
@SergeyGavruk. Bu cevap, son birkaç soruda bir dupe olarak kullanılmış, ancak ifadesi nedeniyle bazı kullanıcıların kafasını karıştırmaktadır.Ve Select list yapıcısının son parametresi seçilen bir değerdir - Son parametre, yöntem tarafından yok sayılır (dahili olarak kendi değerini oluşturur SelectList) . ContribTypeNeyin seçildiğini belirleyen özelliğin ( ) değeridir ( model bağlamanın çalışma şekli budur) ve kod sadece şu olmalıdır: @Html.DropDownListFor(m => m.ContribType, new SelectList(Model.ContribTypeOptions, "ContribId", "Value")Lütfen yanıtı düzeltmek için düzenleyebilir misiniz?

7

Bunun yardımcı olacağını düşünüyorum: Denetleyicide liste öğelerini ve seçilen değeri alın

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);
}

ve Görünümde

@Html.DropDownList("CategoryId",String.Empty)

5
Deponuzu bu şekilde Görünüme maruz bırakmak genellikle bir tanrı modeli değildir.
André Pena

6

DropDownList'te Dinamik Verileri bağlamak için aşağıdakileri yapabilirsiniz:

Aşağıdaki gibi Controller'da ViewBag oluşturun

ViewBag.ContribTypeOptions = yourFunctionValue();

şimdi bu değeri aşağıdaki gibi görünümde kullanın:

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

0
     @Html.DropDownListFor(m => m.SelectedValue,Your List,"ID","Values")

Burada Değer, Seçili Değerinizi kaydetmek istediğiniz model nesnesidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.