【问题标题】:Adding a default SelectListItem添加默认的 SelectListItem
【发布时间】:2009-05-21 17:32:53
【问题描述】:
 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..")。这可能吗?

【问题讨论】:

    标签: asp.net-mvc linq


    【解决方案1】:
    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)
           });
    

    【讨论】:

      【解决方案2】:

      当您使用 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
        }
      }
      

      【讨论】:

      • 这是我一直在寻找的答案。
      【解决方案3】:
      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;
      

      【讨论】:

        【解决方案4】:

        首先将您的默认值放入列表中

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

        然后做 list.addrange(linq select query)

        干杯

        【讨论】:

          【解决方案5】:

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

          IList mydata = (from tmp in myXML.Descendants("R").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 = "--点击选择--" });

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

          【讨论】:

            【解决方案6】:

            在我查看了许多问题后,我没有找到我要找的东西。我不需要很多代码行来做一个简单的下拉菜单。所以我想和你分享我使用的东西,它简单易用..(特别是如果你不想使用实体框架..

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

            【讨论】:

              【解决方案7】:

              这仅适用于在 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)
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-04-25
                • 1970-01-01
                • 2017-12-19
                • 2016-08-03
                • 2014-02-13
                • 1970-01-01
                相关资源
                最近更新 更多