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

我將上面的視圖返回到視圖並填充DropDownList。我想在返回到視圖之前將上面的linq結果添加一個默認的SelectListItem (0, "Please Select..")。這可能嗎?添加一個默認的SelectListItem

回答

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

當你正在使用ASP.NET MVC,您可以通過指定的HtmlHelper的DropDownField方法的optionLabel參數的值做到這一點的觀點 - 如:

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

將這種類型的代碼放在UI層中比在數據層中使用它更合適。這樣做的一個缺點是,你的選擇框將有一個空的字符串值,而不是「選擇一個」選項的「0」,但這不是一個真正的問題,因爲如果你的控制器動作可以將其視爲空值方法可以接受相關參數的可爲空的int - 例如

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

+1只是在視圖中這樣做;簡單,它的作品:) – Dan 2010-03-02 14:43:14

0

這是我做的,我從一個XML文件讀取我的值到IList。然後,我在位置0處向IList中插入一條新記錄。然後從IList中選擇一個列表。

的IList < MY_DATA> MYDATA =(從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,新My_DATA(){NR = 「」 ,NA = 「 - 單擊要選擇類別」});

的SelectList MYLIST =新的SelectList(MYDATA, 「NR」, 「NA」);

0

firt把你的默認值列表

list.add(默認列表項)

,然後做list.addrange(LINQ選擇查詢)

歡呼

0

後我查閱了很多問題,我不覺得我有什麼我在尋找。我不需要很多代碼就可以簡單地下注。所以我想與你分享我使用什麼,它很容易和簡單..(特別是如果你不想使用和實體框架..

using System.Web。MVC;

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

例如:

控制器地址:

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

查看地址:

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

這僅僅是誰使用網頁framwork人(不MVC和webform),你需要做

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

注意:OptionalLabel需要是中間參數。

相當於將添加一個SelectListitem到列表中的數據:

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)