2011-11-16 11 views
5

Mam aplikację internetową C# .Net MVC3. Używam list rozwijanych w całym miejscu i odnoszących sukcesy. Są jednak dwa problemy, z którymi mam problem. Jedyną różnicą jest to, że tworzę SelectLists w locie w kodzie, zamiast korzystać z tabel Lookup. Używam tabel odnośników dla wszystkich pozostałych zrzutów. Podczas QuickWatch SelectLists w kodzie, właściwa pozycja ma wartość właściwości Selected ustawioną na true. Jednak po załadowaniu strony element o właściwości Selected nie jest wyświetlany. Pierwszy przedmiot to. Jakieś pomysły? To jeden z tych beznadziejnych. Próbowałem obu sposobów poniżej. W obu przypadkach ViewBag.DateToYear i SelectList DateToYear mieć odpowiednie wartości i '' Wybrane właściwości ustawioneMVC3 Lista rozwijana nie wybiera wybranego elementu

1)

// Kontroler

 IList<string> dateToYear = new List<string>(); 
     for (int i = 0; i < numberYears; i++) 
     { 
      dateToYear.Add(DateTime.Now.AddYears(i).Year.ToString()); 
     } 
     ViewBag.DateToYear = new SelectList(dateToYear,"2014") 

// Zobacz

 @Html.DropDownList("DateFromYear", (SelectList)ViewBag.DateToYear) 

2) // Sterownik SAME jak wyżej

// Zobacz

List<SelectListItem> DateToYear = new List<SelectListItem>(); 
foreach (var m in ViewBag.DateToYear) 
{ 
    DateToYear.Add(new SelectListItem { Selected = @m.Selected, Value = @m.Text, Text = @m.Text }); 
} 

@Html.DropDownList("DateFromYear", DateToYear) 
+2

czy mógłbyś napisać jakiś kod? –

+0

@Thhomas .... czy to pomaga? – MikeTWebb

+0

Czy próbowałeś DropDownListFor? Dlaczego nie masz opcji SelectList jako części A) ViewBag lub B) mocno wpisanego modelu widoku? Nie widzę, jak się wychodzisz z tego, jak się do tego zbliżasz. –

Odpowiedz

5

Nie jestem pewien, czy jest to przypadek, ale miałem pewne problemy z dropdownboxes nie uzyskiwanie wybranych kilka dni temu.

Mój problem polegał na: Mam @model.Options i stworzyłem @html.dropdownlist("Options", @model.Options, [...]). Ponieważ jednak mieli to samo imię, w jakiś sposób się kłóciły. Kiedy użyłem @html.dropdownlist("anythingElse", @model.Options, [...]), działało dobrze.

Po wybraniu opcji return View(model) wybrane opcje również zostały ustawione poprawnie, więc trochę czasu zajęło, aby to rozgryźć. Może masz ten sam problem?

+0

@Ron ... ty ROCK! To było to. Człowieku, to klasyczny błąd – MikeTWebb

+0

nie ma za co. Cieszę się, że mogłem pomóc. Zająłem się długo, aby to rozgryźć: P –

+0

Dzięki to działa również dla mnie ... –

6

Problem polega na tym, że SelectList działa zgodnie z projektem. Błąd jest w projekcie. Możesz ustawić wybraną właściwość w SelctedItem, ale zostanie to całkowicie zignorowane, jeśli przejdziesz przez listę za pomocą funkcji GetEnumerator() (lub jeśli Mvc zrobi to za Ciebie). Zamiast tego Mvc utworzy nowe SelectfListItems.

Musisz użyć SelectList ctor z SelectListItem [], Text-Name, Value-Name i SelectedValue. Pamiętaj, aby przekazać jako SelectedValue wartość VALUE SelectListItem, którą chcesz wybrać, a nie sam SelectListItem! Przykład:

Dlaczego nie robić tego w kontrolerze?

Pseudo kod:

// kontroler

ViewBag.DateToYear = new SelectList(new[] 
{ 
new SelectListItem { Text = "10", Value = "10" }, 
new SelectListItem { Text = "15", Value = "15" } 
new SelectListItem { Text = "25", Value = "25" }, 
new SelectListItem { Text = "50", Value = "50" }, 
new SelectListItem { Text = "100", Value = "100" }, 
new SelectListItem { Text = "1000", Value = "1000" }, 
}, "SomeText", "Value", "15"); 

Druga opcja powinna być zaznaczona.

+0

Próbowałem, że też się zbliżyłeś i to działało ... dziękuję – MikeTWebb

0

To samo działo się również ze mną, upewnij się, że nie podałeś tego samego identyfikatora co nazwa nieruchomości podana na modelu. W ten sposób rozwiązałem ten problem ...