添加默认的SelectListItem

时间:2009-05-21 17:32:54

标签: asp.net-mvc linq

 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..")。这可能吗?

7 个答案:

答案 0 :(得分:31)

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)
       });

答案 1 :(得分: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
  }
}

答案 2 :(得分: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;

答案 3 :(得分:0)

这就是我所做的,我将我的值从XML文件读入IList。然后我在位置0的IList中插入一条新记录。然后从IList中选择一个列表。

  

的IList&LT; MY_DATA&gt; mydata =(来自myXML.Descendants(“R”)中的tmp。ToList()

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

mydata.Insert(0,new My_DATA(){NR =“”,NA =“ - Click to Select--”});

     

SelectList mylist = new SelectList(mydata,“NR”,“NA”);

答案 4 :(得分:0)

将您的默认值放在列表中

list.add(您的默认列表项)

然后执行list.addrange(linq select query)

欢呼声

答案 5 :(得分:0)

这适用于使用Razor V2和C#的网页框架(不是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)

答案 6 :(得分:0)

在我回顾了很多问题之后,我找不到我正在寻找的东西。我不需要很多行代码就可以进行简单的drowpdown。所以我想与你分享我使用的东西,简单明了..(特别是如果你不想使用和实体框架..

使用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--")