2010-06-16 10 views

Odpowiedz

162

Zobacz this MSDN article i example usage here on Stack Overflow.

Powiedzmy, że masz następujące klasy LINQ/POCO:

public class Color 
{ 
    public int ColorId { get; set; } 
    public string Name { get; set; } 
} 

I powiedzmy, że masz następujący model:

public class PageModel 
{ 
    public int MyColorId { get; set; } 
} 

I wreszcie, powiedzmy, że masz poniższa lista kolorów. Mogą one pochodzić z kwerendy LINQ, z listy statycznej, itp .:

public static IEnumerable<Color> Colors = new List<Color> { 
    new Color { 
     ColorId = 1, 
     Name = "Red" 
    }, 
    new Color { 
     ColorId = 2, 
     Name = "Blue" 
    } 
}; 

Pana zdaniem, można utworzyć listy rozwijanej tak:

<%= Html.DropDownListFor(n => n.MyColorId, 
         new SelectList(Colors, "ColorId", "Name")) %> 
+0

to naprawdę jasne. Chciałbym wiedzieć, gdzie powinienem umieścić IEnumerable w moim kodzie? Wiem, że to głupie jak pytanie, ale jestem bardzo zagubiony i nowy w tym: s – Rinesse

+5

Bez obaw, przyjacielu. Wiem, jak to jest.:) Jak zasugerowałeś w początkowym pytaniu, czy jest to lista statyczna, którą utworzysz w kodzie, czy zamierzasz wyciągnąć tę listę z bazy danych? –

+0

statyczna lista zawierająca 4 opcje, a nie frop bazy danych – Rinesse

51
<%: 
    Html.DropDownListFor(
      model => model.Color, 
      new SelectList(
        new List<Object>{ 
         new { value = 0 , text = "Red" }, 
         new { value = 1 , text = "Blue" }, 
         new { value = 2 , text = "Green"} 
        }, 
        "value", 
        "text", 
        Model.Color 
      ) 
     ) 
%> 

lub można nie pisz klas, umieść coś takiego bezpośrednio w widoku.

+0

Dzięki, ciężko było znaleźć rozwiązanie dla ... – ctorx

+2

Otrzymuję komunikat poniżej błędu przy próbie kodu: "Odwołanie do obiektu nie jest ustawione na instancję obiektu. " –

+9

Zły pomysł na dodanie logiki modelu do widoku –

28

Unikać dużo tłuszczu palców zaczynając ze słownikiem w Modelu

namespace EzPL8.Models 
{ 
    public class MyEggs 
    { 
     public Dictionary<int, string> Egg { get; set; } 

     public MyEggs() 
     { 
      Egg = new Dictionary<int, string>() 
      { 
       { 0, "No Preference"}, 
       { 1, "I hate eggs"}, 
       { 2, "Over Easy"}, 
       { 3, "Sunny Side Up"}, 
       { 4, "Scrambled"}, 
       { 5, "Hard Boiled"}, 
       { 6, "Eggs Benedict"} 
      }; 

    } 


    } 

w widoku przekonwertować go do listy na wyświetlaczu

@Html.DropDownListFor(m => m.Egg.Keys, 
         new SelectList(
          Model.Egg, 
          "Key", 
          "Value")) 
25

Hi oto jak zrobiłem to w Jeden Projekt:

 @Html.DropDownListFor(model => model.MyOption,     
        new List<SelectListItem> { 
         new SelectListItem { Value = "0" , Text = "Option A" }, 
         new SelectListItem { Value = "1" , Text = "Option B" }, 
         new SelectListItem { Value = "2" , Text = "Option C" } 
        }, 
        new { @class="myselect"}) 

Mam nadzieję, że to pomaga Ktoś. Dzięki

8

Albo czy to z kontekstu bazy danych można użyć

@Html.DropDownListFor(model => model.MyOption, db.MyOptions.Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString() })) 
+14

Proszę nie zachęcać do tego rodzaju nonsensu. Jeśli lubisz odwoływać się do kontekstu db w widokach maszynki Razor, który jest na ciebie, ale za to O nas, którzy lubią budować oprogramowanie we właściwy sposób, to jest okropny pomysł. Powiąż widok Razor z klasą widoku, wszelkie dane potrzebne do widoku są przechowywane w instancji modelu widoku utworzonego przez kontroler. Jest to jeden z powodów, dla których uciekam z .Net, zbyt wielu okropnych programistów robi straszne rzeczy z ich kodami powodującymi ogromne bóle głowy dla wszystkich innych. Założę się, że umieszczasz całą swoją logikę biznesową w kontrolerach! – JBeckton

+2

Po pierwsze, przepraszam za błędy gramatyczne, ponieważ angielski nie jest moim pierwszym językiem. Zawsze miło jest zobaczyć, jak ktoś robi tak przemyślany komentarz, cieszę się, panie, że poświęciłeś czas, aby wnieść swój wkład. Zawsze upewniasz też, że zawód programisty jest w dobrych rękach tak samo jak twój, ponieważ mój nie zrobi tego. Taki jak twój ignorancki komentarz jest taki, że nigdy więcej tutaj nie piszę. Mogę poinformować, że kiedy to napisałem, miałem 8 miesięcy edukacji i nigdy wcześniej nie dotknąłem Web Development. Chciałem podzielić się innym podejściem z moją małą wiedzą. –

+4

8 miesięcy w? Dlaczego więc próbujesz rozwiązywać problemy, skoro nie wiesz jak? Mój komentarz jest daleki od niewiedzy, widzę te rzeczy dzień po dniu. Musisz zacząć rozważać ilość pracy ręcznej, którą jesteś zobowiązany wobec swoich kolegów. wyobraź sobie, że masz aplikację korporacyjną z setkami widoków, a Twój CTO chce przejść na Oracle DB. Wyobraź sobie dosłowny koszt refaktoryzacji wszystkich widoków i kontrolerów korzystających z rozwijanych list tylko z powodu twojej linii kodu! Nie próbuję cię obrażać, tylko próbuję ci wytłumaczyć, jak mała zła rada może przynieść ogromne efekty. – JBeckton

4

z "Proszę wybrać jedną pozycję"

@Html.DropDownListFor(model => model.ContentManagement_Send_Section, 
    new List<SelectListItem> { new SelectListItem { Value = "0", Text = "Plese Select one Item" } } 
    .Concat(db.NameOfPaperSections.Select(x => new SelectListItem { Text = x.NameOfPaperSection, Value = x.PaperSectionID.ToString() })), 
    new { @class = "myselect" }) 

pochodzących z kodów: Mistrza Programmer & & Joel Wahlund;
King Reference: https://stackoverflow.com/a/1528193/1395101JaredPar;

Dzięki Mistrz Programista & & Joel Wahlund & & JaredPar;

Życzymy powodzenia przyjaciołom.