【问题标题】:populating a DropDownlist in ASP.NET MVC在 ASP.NET MVC 中填充 DropDownlist
【发布时间】:2011-06-10 02:09:28
【问题描述】:

我正在学习 ASP.NET MVC。我在处理下拉列表时遇到了一个小问题。

这就是我在控制器中所做的

List<Int32> myList = new List<Int32>();
var a = (from m in datacontext.services
                 select m.ServiceID);
myList = a.ToList();
ViewData["ServiceID"] = new SelectList((IEnumerable<SelectListItem>)
                                a.ToList(), "ServiceID", "ServiceID");

在视图中

 @Html.DropDownListFor(model => model.ServiceID, ViewData["ServiceID"] as SelectList)

这会导致错误

无法转换类型为“System.Collections.Generic.List1[System.Int32]' to type 'System.Collections.Generic.IEnumerable1[System.Web.Mvc.SelectListItem]”的对象。”

如何解决?

用查询填充下拉列表的最佳方法是什么?

【问题讨论】:

    标签: c# .net asp.net asp.net-mvc asp.net-mvc-3


    【解决方案1】:

    演员阵容有误。

    要修复,您可以这样做:

    var a = datacontext.services.Select(arg => new { ServiceID = arg.ServiceID }).ToList();
    ViewData["ServiceID"] = new SelectList(a, "ServiceID", "ServiceID");
    

    或者这个:

    var a = datacontext.services.Select(arg => arg.ServiceID).ToList();
    ViewData["ServiceID"] = new SelectList(a);
    

    在您的代码中,a 是整数列表。不能投到SelectListItem的列表中。

    旁注: myList 变量未在您的代码中使用。

    【讨论】:

      【解决方案2】:

      您需要将Int32 的列表转换为SelectListItem 的列表/IEnumerable。您无法以直接强制转换的方式执行此操作(这是您想要做的,并且您的错误代表什么)。

      您可以通过更改选择返回类型来调整您的 LINQ 查询以返回 IEnumerable&lt;SelectListItem&gt;

      var a = (from m in datacontext.services
                       select new SelectListItem{ Text = m.ServiceID.ToString(), Value = m.ServiceID.ToString() });
      

      然后您可以通过以下方式将其加载到SelectList

      ViewData["ServiceID"] = new SelectList(a);
      

      【讨论】:

        【解决方案3】:

        此外,如果您有一个想要填充文本项的下拉列表,您可以执行以下操作:

        控制器:

        public ActionResult Create()
        {
            var viewModel = new Store();
            var storeTypes = new SelectList(
                                (   
                                    from t in _db.StoreTypes
                                    select new SelectListItem
                                    {
                                        Text  = t.StoreTypeName,
                                        Value = SqlFunctions.StringConvert((double)t.StoreTypeID) //convert int to string (yikes)
                                    }
                                )
                                , "Value", "Text");
        
            ViewData["StoreTypes"] = storeTypes;    
             return View(viewModel);
        } 
        

        查看:

        <div class="class">
            <%: Html.DropDownList("StoreTypeID", (SelectList)ViewData["StoreTypes"]) %>
            <%--<%: Html.DisplayTextFor(model => model.StoreTypeID) %>--%>
        </div>
        

        【讨论】:

          猜你喜欢
          • 2015-10-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-08
          • 1970-01-01
          相关资源
          最近更新 更多