C# Net MVC将项目添加到绑定的Dropdownlist

C# Net MVC将项目添加到绑定的Dropdownlist,c#,asp.net-mvc,drop-down-menu,C#,Asp.net Mvc,Drop Down Menu,我的页面视图当前有一个dropdownlist,它将绑定到来自控制器的集合。这很好,但是我想在dropdownlist的顶部插入一个不在我的集合中的项目,例如列表当前包含以下项目 Open Closed 我想添加第三个选项“All”,但我不想将此选项添加到我的数据库中。在Webforms中,我会绑定控件,然后插入另一个项,但MVC似乎不可能做到这一点,我是否认为在绑定dropdownlist后,我需要向视图添加一些Javascript来添加这个新项 谢谢简单 您可以在控制器中随心所欲地制作

我的页面视图当前有一个dropdownlist,它将绑定到来自控制器的集合。这很好,但是我想在dropdownlist的顶部插入一个不在我的集合中的项目,例如列表当前包含以下项目

Open
Closed
我想添加第三个选项“All”,但我不想将此选项添加到我的数据库中。在Webforms中,我会绑定控件,然后插入另一个项,但MVC似乎不可能做到这一点,我是否认为在绑定dropdownlist后,我需要向视图添加一些Javascript来添加这个新项

谢谢

简单

您可以在控制器中随心所欲地制作

   var list = db.Table
                .Select( t => new SelectListItem
                              { 
                                  Key = t.ID.ToString(),
                                  Value = t.Name
                              } )
                .ToList();
   list.Insert( 0, new SelectListItem { Key = "-1", Value = "All" } );

   ViewData["TableSelect"] = list;
并将其传递到viewdata中

其他选项直接在查看页面中

<%= Html.DropDownList("DropDown","all" )%>

但您只能添加一个选项

确保您没有在ur db中存储添加的选项,对吗?
因此,在保存之前,请检查选项值并应用您的逻辑。

否。将您的数据构建为SelectListItems列表,并在控制器中前置

   var list = db.Table
                .Select( t => new SelectListItem
                              { 
                                  Key = t.ID.ToString(),
                                  Value = t.Name
                              } )
                .ToList();
   list.Insert( 0, new SelectListItem { Key = "-1", Value = "All" } );

   ViewData["TableSelect"] = list;
在视图方面:

   <%= Html.DropDownList( "TableID",
                          (IEnumerable<SelectListItem>)ViewData["TableSelect"] ) %>

更新的实现

var list = _db.Status.ToList();
list.Add(new Status(){DevelopmentStatusID = -1, DevelopmentStatusDesc = "All"});
var result = list.OrderBy(d => d.StatusID).ToList();

ViewBag.StatusID = new SelectList(result, "StatusID", "StatusDesc");
然后在index.html中

    @Html.DropDownList("StatusID", null, htmlAttributes: new {@class = "form-control"})

这个值是空字符串,因此我认为它不会被发回。如果你想要一个像“all”而不是“none”这样的值,你需要调整服务器端的列表(或使用Javascript)。如果相同的名称包含在viewdata中,我们也可以直接使用。最终他必须在服务器端进行检查,因为GavD不想要“all”若要在DBI中,则无法获取列表。若要使用Insert,则意味着没有Insert方法,因为列表的类型为Interface(IQueryable),并且除非合并两个接口,否则无法在其中添加新项。抱歉--错过了一个步骤。选择新的SelectListItems后,您需要添加一个ToList(),使其成为列表而不是IEnumerable。然后你可以添加到它。我已经更新了。为什么不使用?因为在服务器端,我猜值将是null或空字符串。。你得到了条件。