繁体   English   中英

在 ASP.NET MVC 中填充 DropDownlist

[英]populating a DropDownlist in ASP.NET MVC

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

这就是我在 controller 中所做的

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)

这会导致错误

Unable to cast object of type 'System.Collections.Generic.List 1[System.Int32]' to type 'System.Collections.Generic.IEnumerable 1[System.Web.Mvc.SelectListItem]'."

如何解决?

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

演员阵容有误。

要修复,您可以这样做:

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变量。

您需要将Int32列表转换为SelectListItem的 List/IEnumerable。 您无法将其作为直接演员来执行(这是您要尝试做的,以及您的错误所代表的内容)。

您可以通过更改 select 返回类型来调整 LINQ 查询以返回IEnumerable<SelectListItem>

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

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

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

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

Controller:

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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM