我尝试将LINQ查询传递到视图包,以便从我的数据库中提取列表并将其显示在DropDownList
中。
这就是我提出的:
List<SelectListItem> ddCompany = new List<SelectListItem>();
var companyList = (from c in leases.tblvCompanies
select new {c.Company_ID, c.Company }).ToList();
foreach(var item in companyList)
{
ddCompany.Add(new SelectListItem { Value = companyList.Company_ID, Text = companyList.Company });
}
ViewBag.ddCompany = ddCompany;
我得到的错误如下:
&#39;&System.Collections.Generic.List LT; AnonymousType#1&GT;&#39;不包含 &#39; Company_ID&#39;的定义没有扩展方法&#39; Company_ID&#39; 接受第一个类型的参数 &#39;&System.Collections.Generic.List LT; AnonymousType#1&GT;&#39;可以找到(是 你错过了使用指令或程序集引用?)
有人可以帮我弄清楚它为什么不起作用吗?还有什么不同于这个吗?
修改
感谢KiwiPiet和Robert McKee,这就是它的工作原理:
控制器:
List<SelectListItem> ddCompany = new List<SelectListItem>();
var companyList = (from c in leases.tblvCompanies
orderby c.Company ascending
select new { c.Company_ID, c.Company }).ToList();
foreach (var item in companyList)
{
ddCompany.Add(new SelectListItem { Value = item.Company_ID.ToString(), Text = item.Company });
}
ViewBag.ddCompanyList = ddCompany;
ViewBag.messageString = "ddCompanyList";
查看:
@Html.DropDownList("ddCompanyList")
答案 0 :(得分:2)
您不应该在循环中引用列表companyList而不是单数项:
ddCompany.Add(new SelectListItem { Value = companyList.Company_ID, Text = companyList.Company });
应该是:
ddCompany.Add(new SelectListItem { Value = item.Company_ID, Text = item.Company });
我实际上建议如下:
ViewBag.ddCompany=leases.tblvCompanies
.Select(c=>new SelectListItem {Value=c.Company_ID,Text=c.Company})
.ToList();
虽然我通常不喜欢将UI元素(SelectListItem)从控制器传递到视图,但这是视图的责任。
答案 1 :(得分:1)
您可以尝试以下操作,而不是创建匿名类型吗?
var ddCompany = (from c in leases.tblvCompanies
select new SelectListItem{ Value = c.Company_ID, Text = c.Company })
.ToList();
ViewBag.ddCompany = ddCompany;
答案 2 :(得分:1)
为什么不使用强类型视图?您可以传递视图模型 为此目的在控制器和视图之间。像这样:
@model List<MvcApplication1.Models.SelectListItem>
@foreach(var item in Model)
{
<span>@item.Value</span>
}
在视图中:
function disable_notifications( $disabled, $form, $lead )
{
return true;
}
答案 3 :(得分:0)
您将匿名类型传递给您的视图,这对于您尝试执行的操作并非实际情况 - 匿名类型是作为内部生成的。您最好使用视图模型来传递数据,您将不再遇到这样的问题。