【发布时间】:2015-02-21 01:05:31
【问题描述】:
我在将 ViewModel 传递到视图时遇到问题。
我的视图模型:
namespace ImpactDBASPNet.Models
{
public class ComputerInfoViewModel
{
public List<string> CompanyList { get; set; }
public tbl_computerinfo entitymodeleffort { get; set; }
}
}
控制器:
public ActionResult Index()
{
var tbl_computerinfo = db.tbl_computerinfo.Include(t => t.tbl_equipment);
tbl_computerinfo = tbl_computerinfo.Where(c => c.Company == "Test Company");
List<string> companylist = new List<string>();
companylist.Add("Hello1");
companylist.Add("hello2");
ComputerInfoViewModel model = new ComputerInfoViewModel();
model.CompanyList = companylist;
model.entitymodeleffort = tbl_computerinfo;
return View(model);
}
我这样做主要是因为我需要在我的视图中传递一个下拉列表的列表,所以我需要传递实体框架模型和列表。我得到的错误是:
Error 1 Cannot implicitly convert type 'System.Linq.IQueryable<ImpactDBASPNet.Models.tbl_computerinfo>' to 'ImpactDBASPNet.Models.tbl_computerinfo'. An explicit conversion exists (are you missing a cast?) c:\impactdbaspnet\controllers\tbl_computerinfocontroller.cs 31 39 ImpactPortal
【问题讨论】:
-
您的
.Where子句生成IEnumerable<tbl_computerinfo>。将.FirstOrDefault()添加到末尾以返回单个tbl_computerinfo(您可能想要测试null) -
感谢您的回复,斯蒂芬。这会产生刚刚反转的相同错误,IE 无法将 ImpactDBASPNet.Models.tbl_computerinfo 隐式转换为 System.Linq.Iqueryable
tbl_computerinfo) 它还保留了我最初遇到的现有错误,所以现在有两个错误而不是一个。 -
没有意义。你做了
tbl_computerinfo = tbl_computerinfo.Where(c => c.Company == "Test Company").FirstOrDefault();吗? -
好的,可以看到问题 - 您需要更改其中一个变量名称(第一行返回
IEnumerable<tbl_computerinfo>,但在第二行中您尝试将相同的变量更改为tbl_computerinfo)。而是做var info = db.tbl_computerinfo.Include(t => t.tbl_equipment); tbl_computerinfo = info.Where(c => c.Company == "Test Company").FirstOrDefault(); -
斯蒂芬,这行得通。非常感谢您的帮助。如果您想将其转化为答案,我会将其标记为解决方案!
标签: c# asp.net asp.net-mvc entity-framework