C# ASP.Net将ViewModel传递给视图(底层实体框架)
将ViewModel传递到视图时遇到问题 我的ViewModel:C# ASP.Net将ViewModel传递给视图(底层实体框架),c#,asp.net,asp.net-mvc,entity-framework,C#,Asp.net,Asp.net Mvc,Entity Framework,将ViewModel传递到视图时遇到问题 我的ViewModel: namespace ImpactDBASPNet.Models { public class ComputerInfoViewModel { public List<string> CompanyList { get; set; } public tbl_computerinfo entitymodeleffort { get; set; } } } 命名空间
namespace ImpactDBASPNet.Models
{
public class ComputerInfoViewModel
{
public List<string> CompanyList { get; set; }
public tbl_computerinfo entitymodeleffort { get; set; }
}
}
命名空间影响dbaspnet.Models
{
公共类计算机信息视图模型
{
公共列表公司列表{get;set;}
公共tbl_computerinfo EntityModelefort{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);
}
public ActionResult Index()
{
var tbl_computerinfo=db.tbl_computerinfo.Include(t=>t.tbl_设备);
tbl_computerinfo=tbl_computerinfo.其中(c=>c.公司==“测试公司”);
List companylist=新列表();
公司列表添加(“Hello1”);
公司列表。添加(“hello2”);
ComputerInfoViewModel=新的ComputerInfoViewModel();
model.CompanyList=CompanyList;
model.entitymodeleffort=tbl_computerinfo;
返回视图(模型);
}
我这样做主要是因为我需要在视图中为dropdownlist传递一个列表,所以我需要传递实体框架模型和列表。我得到的错误是:
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
错误1无法将类型“System.Linq.IQueryable”隐式转换为“ImpactDBASPNet.Models.tbl\u computerinfo”。存在显式转换(是否缺少转换?)c:\impactdbaspnet\controllers\tbl\u computerinfocontroller.cs 31 39 ImpactPortal
属性entitymodelefort
是tbl\u computerinfo
的类型,但您将IEnumerable
赋值给它,导致错误。您需要使用FirstOrDefault()
(或其中一个变体-Single()
等)返回单个tbl\U computerinfo
对象
将代码更改为
public ActionResult Index()
{
var tbl_computerinfo = db.tbl_computerinfo
.Include(t => t.tbl_equipment)
.Where(c => c.Company == "Test Company")
.FirstOrDefault();
List<string> companylist = new List<string>() { "Hello1", "Hello2" }; // save a few lines of code
ComputerInfoViewModel model = new ComputerInfoViewModel();
model.CompanyList = companylist;
model.entitymodeleffort = tbl_computerinfo;
return View(model);
}
及
在我看来
@Html.DropDownListFor(m => m.entitymodeleffort.SomeProperty, Model.CompanyList, ...)
您的
.Where
子句生成IEnumerable
。将.FirstOrDefault()
添加到末尾以返回单个tbl\u computerinfo
(您可能需要测试null
)谢谢您的回复,Stephen。这会产生刚刚反转的相同错误,即无法将ImpactDBASPNet.Models.tbl_computerinfo隐式转换为System.Linq.Iqueryabletbl_computerinfo)它还保留了我最初存在的错误,因此现在有两个错误,而不是一个。没有意义。您是否执行了tbl_computerinfo=tbl_computerinfo.Where(c=>c.Company==“Test Company”).FirstOrDefault()代码>?好的,可以看到问题-您需要更改一个变量名(第一行返回IEnumerable
,但在第二行中,您试图将同一个变量更改为tbl\U computerinfo
)。而是做var info=db.tbl\u computerinfo.Include(t=>t.tbl\u设备);tbl_computerinfo=info.Where(c=>c.Company==“测试公司”).FirstOrDefault()代码>斯蒂芬,成功了。非常感谢你的帮助。如果你想把它变成一个答案,我会把它标记为决议!
model.CompanyList = new SelectList(companylist);
@Html.DropDownListFor(m => m.entitymodeleffort.SomeProperty, Model.CompanyList, ...)