2010-08-02 19 views
12

Zaten çok benzer soruların olduğunu biliyorum, ancak bunu anlamaya çalışmak için saatler harcadım ve diğer cevapların hiçbiri yardımcı görünmüyor!DropDownListFor - dizelerin basit bir listesini görüntüler

Sadece MVC kullanarak bir açılır listede dizelerinin listesini görüntülemek istiyorum. Bu gerçekten çok mu zor? "Metin" ve "Değer" ayrımı yok (MVC'nin bir tane gerektirdiği göz önüne alındığında) - kullanıcıya gösterilen dize benim değerin.

Bugüne kadar aşağıdaki var:

Denetleyici:

public ActionResult Index() 
{ 
    return View(new HomeViewModel()); 
} 

ViewModel:

public class HomeViewModel 
{ 
    public HomeViewModel() 
    { 
     Items = new SelectList(new[] 
     { 
      new SelectListItem { Text = "One", Value = "One" }, 
      new SelectListItem { Text = "Two", Value = "Two" }, 
     }); 
    } 

    public SelectList Items { get; set; } 
} 

Görünüm:

<% using (Html.BeginForm()) { %> 
    <% Html.DropDownListFor(x => x.Items, Model.Items); %> 
    <input type="submit" value="Go!" /> 
<% } %> 

Ama şey Görüntülenmekte olan bir aşağı açılan listeyle sonuçlanmış gibi görünüyor. Neyi yanlış yapıyorum?

cevap

10
<%= Html.DropDownListFor(x => x.Items, Model.Items) %> 

İfadeleri ve deyimleri karıştırıyorsunuz. Html yardımcı bir dizge döndürür, böylece 'html değeri' (ve ; sonra) çıktı için = kullanmanız gerekir.

Güncelleme:

Items = new SelectList(new[] 
         { 
          new SelectListItem {Text = "One", Value = "One"}, 
          new SelectListItem {Text = "Two", Value = "Two"}, 
         }, "Text", "Value"); 

Güncelleme 2:

public class HomeViewModel 
{ 
    public HomeViewModel() 
    { 
     Items = new SelectList(new[] { "One", "Two" }); 
     CurrentItem = "Two"; 
    } 

    public SelectList Items { get; set; } 
    public string CurrentItem { get; set; } 
} 

Ve View: Aslında dava için

Bir daha da basit bir şekilde bunu yapabilir:

<%= Html.DropDownListFor(x => x.CurrentItem, Model.Items) %> 
+0

Arrgh, ne aptal bir hata! Artık 2 öğe içeren bir açılır liste görebiliyorum ama ikisi de System.Web.Mvc.SelectListItem diyor. SelectList'in yapıcısını çağırmamla ilgili bir sorun mu var? – Grokys

+0

Oh evet - kurucuda, DropDown'da görüntülemek istediğiniz alanları belirtmeniz gerekir. Aksi takdirde, aldığınız şey varsayılan SelectListItem.ToString() 'dir. – Yakimych

+0

Teşekkürler, güncellemeniz 2 tam olarak aradığım şey :) – Grokys

İlgili konular