C# Net MVC将项目添加到绑定的Dropdownlist
我的页面视图当前有一个dropdownlist,它将绑定到来自控制器的集合。这很好,但是我想在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来添加这个新项 谢谢简单 您可以在控制器中随心所欲地制作
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或空字符串。。你得到了条件。