2009-05-21 14 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) 
      }; 
} 

Devuelvo lo anterior a una vista y llene un DropDownList. Me gustaría agregar un valor predeterminado SelectListItem (0, "Please Select..") al resultado de linq anterior antes de que se devuelva a la vista. es posible?Agregando un SelectListItem predeterminado

Respuesta

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

Como está utilizando ASP.NET MVC, puede hacer esto en la vista mediante la especificación de un valor para el parámetro optionLabel del método DropDownField de la HtmlHelper - por ejemplo:

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

Poner este tipo de código en su capa de interfaz de usuario es probablemente más apropiado que tenerlo en la capa de datos. Una desventaja de hacer esto es que su cuadro de selección tendrá un valor de cadena vacío, no un "0" para la opción "Seleccionar uno", pero eso no es realmente un problema, ya que puede tratar esto como un valor nulo si su acción de controlador método puede aceptar un int nullable para el parámetro relevante - por ejemplo

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

+1 acaba de hacer esto en una vista; simple y funciona :) – Dan

+0

Esta fue la respuesta que estaba buscando. –

0

Esto es lo que hice, leí mis valores de un archivo XML a un IList. Luego inserté un nuevo registro en el IList en la posición 0. Luego, hago una lista de selección del IList.

IList < mis_datos> mydata = (de tmp en myXML.Descendants ("R"). ToList()

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

mydata.Insert (0, nuevos mis_datos() {NR = "" , NA = "--click a seleccione--"});

SelectList milista = new SelectList (misdatos, "NR", "NA");

0

firt poner su valor por defecto en la lista

list.add (su artículo lista predeterminada)

y luego hacer list.addrange (consulta LINQ seleccione)

aplausos

0

Después revisé muchas preguntas, y no encuentro lo que Estoy buscando. No necesito muchas líneas de código para tener un simple ahogo. así que quiero compartir con usted lo que uso y es fácil y simple ... (especialmente si no desea utilizar Entity Framework y ...

usando System.Web.Mvc;

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

Por ejemplo:

en controlador complemento:

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

en Ver complemento:

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

Esto es sólo para las personas que están utilizando páginas web framwork (no MVC y formulario web) con la maquinilla de afeitar V2 y C#, se necesitan hacer

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

Nota: OptionalLabel que tenga que ser el parámetro medio.

equivalente sería añadir un SelectListitem a su lista de datos:

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)