[英]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.