【问题标题】:ASP.Net MVC Add Items To Bound DropdownlistASP.Net MVC 将项目添加到绑定下拉列表
【发布时间】:2010-10-31 15:08:18
【问题描述】:

我的页面视图当前有一个下拉列表,它正在绑定到来自控制器的集合。这工作正常,但是我想在下拉列表的顶部插入一个不在我的集合中的项目,例如列表当前获取以下项目

Open
Closed

我想添加“全部”的第三个选项,但我不想将此选项添加到我的数据库中。在 Webforms 中,我只是绑定了控件,然后插入了另一个项目,但似乎这对于 MVC 是不可能的,我是否认为我需要在视图中添加一些 Javascript 以在绑定下拉列表后添加这个新项目?

谢谢

【问题讨论】:

  • 为什么不使用 ?因为我猜在服务器端的值将是 null 或空字符串.. 你得到了条件。

标签: c# asp.net-mvc drop-down-menu


【解决方案1】:

没有。将您的数据构建为 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中包含同名,我们也可以直接使用。
  • 最终他必须在服务器端检查它,因为 GavD 不希望“全部”在数据库中
  • 我无法获取 list.Insert 工作,这意味着没有插入方法
  • 因为list是Interface (IQueryable)类型的,没有办法在里面添加新的item,除非你合并两个Interface。
  • 抱歉——错过了一步。选择新的 SelectListItems 后,您需要添加一个 ToList() 以使其进入 List 而不是 IEnumerable。然后你可以添加它。我已经更新了。
【解决方案2】:

简单

您可以在控制器中随意制作。

并在 viewdata 中传递它。

其他选项直接在视图页面中。

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

但你只能添加一个选项..

确保您没有在您的数据库中存储添加的选项,对吗? 所以在你保存之前,检查选项值并应用你的逻辑。

【讨论】:

  • 这个值是空字符串,因此我认为它不会被回发。如果你想要一个像“all”而不是“none”的值,你需要在服务器端(或使用 Javascript)调整列表。
【解决方案3】:

较新的实现

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多