ASP.Net MVC向绑定的下拉列表中添加项目

3

目前我的页面视图上有一个下拉列表,它会绑定到控制器中的一个集合。这个功能很好用,但我想在下拉列表的顶部插入一个不在我的集合中的选项,例如当前列表中包含以下项目:

Open
Closed

我想要添加第三个选项"All",但我不想将此选项添加到我的数据库中。在Webforms中,我只需绑定控件,然后插入另一个项目,但似乎在MVC中不可能这样做。我是否正确地认为我需要在视图中添加一些JavaScript代码,在绑定下拉列表后添加此新项目?
谢谢

为什么不使用<%= Html.DropDownList("DropDown","all" )%>?因为在服务器端,值将为空或空字符串,我猜你会得到条件。 - Vikas
3个回答

9

不。在控制器中将数据构造为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"] ) %>

如果在 ViewData 中包含相同的名称,我们也可以直接使用 <%= Html.DropDownList("TableSelect") %>。 - Vikas
最终他必须在服务器端检查它,因为GavD不希望“all”出现在数据库中。 - Vikas
我无法让list.Insert工作,它暗示没有插入方法。 - Gavin
因为列表是接口类型(IQueryable),除非合并两个接口,否则无法向其中添加新项。 - Vikas
抱歉——我漏掉了一步。在选择新的SelectListItems之后,您需要添加一个ToList()将其转换为List<SelectListItem>而不是IEnumerable<SelectListItem>。然后您就可以添加到其中了。我已经更新了。 - tvanfosson

0

新的实现

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

0

简单易懂

您可以在控制器中自由设置。

然后通过ViewData传递。

另一个选项是直接在视图页面中设置。

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

但是您只能添加一个选项。

确保您没有将添加的选项存储在数据库中,对吧? 因此,在保存之前,请检查操作中的选项值并应用您的逻辑。


这个值是空字符串,因此我认为它不会被提交。如果你想要一个像“all”而不是“none”的值,你需要在服务器端(或使用Javascript)调整列表。 - tvanfosson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接