2009-05-21 18 views
15
public IEnumerable<SelectListItem> GetList(int? ID) 
{ 
     return from s in db.List 
      orderby s.Descript 
      select new SelectListItem 
      { 
       Text = s.Descript, 
       Value = s.ID.ToString(), 
       Selected = (s.ID == ID) 
      }; 
} 

Powróciłem do widoku i wypełniłem DropDownList. Chciałbym dodać domyślny SelectListItem (0, "Please Select..") do powyższego wyniku linq, zanim zostanie on przywrócony do widoku. czy to możliwe?Dodawanie wartości domyślnej SelectListItem

Odpowiedz

29
return new[] { new SelectListItem { Text = ... } }.Concat(
     from s in db.List 
     orderby s.Descript 
     select new SelectListItem 
     { 
      Text = s.Descript, 
      Value = s.ID.ToString(), 
      Selected = (s.ID == ID) 
     }); 
4
var list = from s in db.List 
      orderby s.Descript 
      select new SelectListItem 
      { 
       Text = s.Descript, 
       Value = s.ID.ToString(), 
       Selected = (s.ID == ID) 
      }; 

list.Insert(0, new SelectListItem { Text = "Please Select...", Value = string.Empty }); 
return list; 
21

Jak używasz ASP.NET MVC, można to zrobić w widoku poprzez podanie wartości parametru optionLabel metody DropDownField o HtmlHelper - np

htmlHelper.DropDownList("customerId", selectList, "Select One"); 

Umieszczenie tego rodzaju kodu w warstwie interfejsu użytkownika jest prawdopodobnie bardziej odpowiednie niż umieszczenie go w warstwie danych. Jedną z wad tego działania jest to, że twoje pole wyboru będzie miało pustą wartość ciągu, a nie "0" dla opcji "Wybierz jeden", ale to naprawdę nie jest problem, ponieważ możesz traktować to jako wartość pustą, jeśli działanie kontrolera metoda może zaakceptować wartość zerową int dla odpowiedniego parametru - np

public ActionResult DoSomething(int? customerId) 
{ 
    if(customerId != null) 
    { 
    // do something with the value 
    } 
} 
+0

+1 prostu zrobił to w widoku; proste i działa :) – Dan

+0

To była odpowiedź, której szukałem. –

0

Oto, co zrobiłem, czytałem moje wartości z pliku XML na IList. Następnie wstawiłem nowy rekord do IList na pozycji 0. Następnie wybierz listę wyboru z IList.

IList < my_data> MYDATA = (z TMP myXML.Descendants ("R"). ToList()

     select new MY_DATA 
         { 
         NR = tmp.Attribute("NR").Value, 
         NA = tmp.Attribute("NA").Value 
         }).ToList<MY_DATA>(); 

mydata.Insert (0, nowe my_data() {NT = "" , nA = "--Click do wybrać--"});

SelectList mylist = new SelectList (mydata "NR", "nA");

0

firt umieścić swoją wartość domyślną na liście

list.add (domyślna lista pozycja)

a następnie zrobić list.addrange (LINQ kwerenda wybierająca)

okrzyki

0

Po Sprawdziliśmy wiele pytań, a ja nie znaleźć to, czego Szukam. Nie potrzebuję wielu linii kodu, aby po prostu mieć prosty drowpdown. więc chcę się z wami podzielić tym, czego używam, i to łatwo i prosto .. (szczególnie, jeśli nie chcesz używać i Entity Framework ..

przy użyciu System.Web.Mvc;

SelectList(IEnumerable items, string dataValueField, string dataTextField); 

na przykład:

w Controller add:

SelectList slTitle = new SelectList(Query.SelectAllTitle(), "TitleID", "TitleName"); 
ViewBag.TitleSelectList = slTitle; 

w Zobacz add:

@Html.DropDownList("TitleSelectList", "--please select--") 
0

To jest tylko dla ludzi, którzy są z wykorzystaniem stron internetowych ram prac (nie MVC i formularz internetowy) z Razor V2 i C#, trzeba zrobić

@Html.DropDownList("category", "Please select", listData) 

Uwaga: OptionalLabel muszą być parametr środkowy.

Equivalent byłoby dodać SelectListitem do listy danych:

var list=db.Query("select id, name from dbtable"); 
    List<SelectListItem> listData = new List<SelectListItem>(); 
    listData.Add(new SelectListItem 
    { 
     Text = "Please select", 
     Value = "", 
    }); 

    foreach(var item in list) { 
     listData.Add(new SelectListItem { 
      Text = item.Name, 
      Value = item.id, 
      Selected = isSelected 
     }); 
    } 

    @Html.DropDownList("play" , listData) 
Powiązane problemy